Глава 3 Использование скриптов WSH
Что такое WSH
Windows Script Host (WSH) — это стандартный компонент операционной системы Windows, который позволяет без предварительной компиляции непосредственно в операционной системе запускать сценарии, написанные на любых языках, поддерживающих технологию СОМ. Собственная объектная модель WSH позволяет из сценариев работать с файловой системой, системным реестром, специальными папками и ярлыками Windows, ресурсами локальной сети, а также запускать процессы и контролировать ход их выполнения. Кроме этого, в самих сценариях WSH можно использовать любые серверы автоматизации (COM-объекты), зарегистрированные в системе.
Примечание_Jjj
WSH встроена в операционные системы Microsoft Windows 98/ME/NT/2000/XP/ Server 2003. Для Windows 95 Windows Script Host можно загрузить с сайта M icrosoft—http: //msdn. microsoft. com /scripting.
Объектная модель WSH
Для того чтобы воспользоваться всеми возможностями, которые представляет эта технология, нужно разобраться в ее структуре. Windows Script Host состоит из целого ряда объектов.
lj Wscript — это главный объект WSH, который содержит информацию о сервере сценариев WSH и позволяет создавать СОМ-объекты, выдавать сообщения в операционную систему, вводить данные с клавиатуры и т. п. Так как данный объект позволяет выполнять все те базовые действия, которые без особых трудностей можно выполнить в среде "1С:Предприятие", то рассматривать этот объект в контексте данной книги будет не уместно.
? WshArguments, WshNamed И WshUnnamed — объекты, обеспечивающие ДОСтуп к параметрам командной строки запущенного сценария Windows. Данные объекты используются исключительно во время запуска скриптов из операционной системы, поэтому их рассмотрение в рамках данной книги бессмысленно.
? Wshshe.il — объект, который позволяет запускать независимые процессы, создавать ярлыки, работать с переменными среды, системным реестром и специальными папками Windows.
П wshSpeciaiFoiders — объект, обеспечивающий доступ к специальным папкам Windows.
П wshShortout — объект, который обеспечивает работу с ярлыками Windows.
О wshUrlshortout — объект, предназначенный для работы с ярлыками сетевых ресурсов.
? wshEnvironment. — объект, предназначенный для работы с переменными среды (для просмотра, изменения и удаления переменных среды).
О wshNotwork — объект, использующийся при работе с локальной сетью. Он содержит сетевую информацию для локального компьютера, а также позволяет подключать сетевые диски и принтеры.
? wshScriptExec — объект, позволяющий запускать консольные приложения в качестве дочерних процессов. Обеспечивает контроль этих приложений и доступ к их стандартным входным и выходным потокам.
О Wshcontroller — объект, управляющий запуском сценариев на удаленных машинах.
О wshRemote — объект, позволяющий управлять сценарием, запущенным на удаленной машине.
П — объект, используемый для получения информации об
ошибке, возникшей в результате выполнения сценария, запущенного на удаленной машине.
? FileSystemObject — дополнительный объект, обеспечивающий доступ к файловой системе компьютера.
Запуск произвольного ?В-скрипта (VBS)
В настоящее время очень распространены ?В-скрипты, которые пришли на замену пакетным файлам (bat). Очень часто возникает необходимость в запуске того или иного скрипта из системы "1C:Предприятие". Однако времени, а зачастую и возможности переводить код из одного языка программирования в другой, нет. Как раз для такой ситуации и используется
СОМ-объект — MSScriptControl, который позволяет запустить произвольный скрипт из контекста "1С:Предприятия". Объект Msscriptcontroi не входит в объектную модель WSH, но часто применяется в "скриптовых" языках.
Рассмотрим пример запуска ?В-скрипта и вывода его результата в окно сообщений системы "1С:Предприятие" (листинг 3.1).
Листинг 3.1. Запуск произвольного ?В-скрипта (VBS) для версии 8.0
// Произвольный скрипт ТекстСкрипта = "Function VBSFunctionО I GetDefaultPrinter = vbNullString
I Set objWMIService = GetObject(""winmgmts:"" & ""{impersonationLevel= impersonate}!\\.\root\cimv2""}
I Set colInstalledPrinters = objWMIService.ExecQuery('"’Select * from Win32_Printer"")
I For Each objPrinter in colInstalledPrinters
I If objPrinter.Attributes and 4 Then I VBSFunction=obj Printer .Name
I Exit For
I End If
I Next
End Function";
// Создание объекта
scrptCtrl = Новый СОМОбъект("MSScriptControl.ScriptControl"); scrptCtrl.Language="vbscript"; // Указание языка // Добавление исполняемого кода
scrptCtrl.AddCode(ЭлементыФормы.ПолеТекстовогоДокумента.ПолучитьТекст());
// Запуск функции по имени и вывод результата
Сообщить(scrptCtrl.run("VBSFunction"));
На самом скрипте останавливаться не будем, т. к. это тема другой главы. Здесь только следует отметить, что он возвращает имя принтера, используемого в системе по умолчанию. Вообще в переменную ТекстСкрипта можно записать любую функцию на ?В-скрипте, а потом выполнить эту функцию, выполнив метод run объекта MSScriptControl. ScriptControl с указанием имени запускаемой функции.
Примечание
Рассмотренный выше код для версии 7.7 будет аналогичным, за исключением создания СОМ-объекта.
Выполнение операций с файловой системой
Для работы с файловой системой из сценариев WSH предназначен объект FiieSystemOb-ject. С помощью этого объекта можно выполнить следующие основные действия:
П создавать каталоги;
? создавать или открывать текстовые файлы;
П копировать или перемещать файлы и каталоги; а удалять файлы и каталоги;
П создавать объекты Drive, Folder и File для доступа к конкретному диску, каталогу или файлу соответственно.
С помощью свойств объектов Drive, Folder и File можно получить детальную информацию о тех элементах файловой системы, с которыми они ассоциированы. Объекты Folder и File также предоставляют методы манипулирования файлами и каталогами (создание, удаление, копирование, перемещение); эти методы в основном копируют соответствующие методы объекта FileSystemObject.
Кроме того, имеются три объекта-коллекции: Drives, Folders и Files. Коллекция Drives содержит объекты Drive для всех имеющихся в системе дисков, Folders — объекты Folder для всех подкаталогов заданного каталога, Files — объекты File для всех файлов, находящихся внутри определенного каталога.
Наконец, из сценария можно читать информацию текстовых файлов и записывать в них данные. Методы для этого предоставляет объект Textstream.
С помощью объекта FileSystemObject можно очень просто написать некое подобие файлового менеджера "Проводник". Рассмотрим основные операции с файловой системой.
Получение сведений о дисках
Для получения сведений об определенном диске предназначен объект Drive. Данный объект позволяет получить информацию о типе файловой системы, метки тома, общем объеме и количестве свободного места и т. д.
Сам объект Drive создается с помощью метода GetDrive объекта FileSystemObject. Приведем пример вывода всех доступных свойств диска (листинг 3.2).
|
|
Листинг 3.2. Вывод информации о диске |
ШтШШШШШШШШ |
// Создаем массив типов дисков
ТипыДисков = Новый Массив();
ТипыДисков.Добавить("Неизвестно");
ТипыДисков.Добавить("Съемный");
ТипыДисков.Добавить("Постоянный");
ТипыДисков.Добавить("Сетевой");
ТипыДисков.Добавить("CD-ROM");
ТипыДисков.Добавить("RAM-диск");
// Создаем объект FileSystemObject
FS© = Новый СОМОбъект("Scripting.FileSystemObject");
// Получаем ссылку на объект Drive = t'SO.Get:.Drive("C") ;
// Выводим свойства диска
Сообщить("Информация о диске С:");
Сообщить("Метка диска: " + Drive.VolumeName);
Сообщить("Размер диска: " + Drive.TotalSize/1024 + " Кбайт");
Сообщить("Свободно: " + Drive.FreeSpace/1024 + " Кбайт");
Сообщить("Буква диска: " + Drive.DriveLetter);
Сообщить("Тип: " + ТипыДисков[Drive.DriveType]);
Сообщить("Файловая система: " + Drive.FileSystem);
Сообщить("Готов к чтению: " + Drive.IsReady);
Сообщить ( "Путь : " + Drive Path) ;
Сообщить("Начальная папка: " +Drive.RootFolder);
Сообщить("Серийный номер: " + Drive.SerialNumber);
Сообщить("Сетевое имя: " + Drive.ShareName);
// Изменяем метку диска
Drive.VolumeNarae = "";
Из всех используемых в коде свойств только VolumeName доступно как для чтения, так и для записи, т. е. с помощью этого свойства можно изменять метку диска.
Получение сведений о папках и файлах
Для получения сведений о папках и файлах используются объекты Foldei и File. Данные объекты позволяют определить дату создания или последнего обращения к папке или файлу, их размер, атрибуты и т. д. Сами объекты создаются С ПОМОЩЬЮ методов GetFolder И GetFile объекта FileSystemObject.
Рассмотрим пример вывода всех доступных свойств папки (листинг 3.3).
I Листинг 3.3. Получение сведений о папке
// Функция возвращает строку с атрибутами файла File.
// Вызывается из основного кода при получении сведений о папке или файле Функция ВернутьАтрибутыФайла(File)
Attr = ПереводИзІО(File,Attributes, 2);
// Функция ПереводИзЮ переводит число из 10 системы счисления
// в произвольную, в данном случае - двоичную.
Если Attr = 0 Тогда Возврат "Обычный";
КонецЕсли;
Стр =
Если (Сред(Attr,СтрДлина(Attr)-4, 1} = "1") и (Стройна (Attr) > 4)
Тогда Стр = Стр + "Папка " КонецЕсли;
Если (Сред (Attr, СтрДлина (Attr) , 1) = "1") и (Стройна (Attr) > 0)
Тогда Стр = Стр + "Только чтение КонецЕсли;
Если (Сред (Attr, СтрДлина (Attr) -і, і) ^ "1") и (Стройна (Attr) > 1)
Тогда Стр = Стр + "Скрытый " КонецЕсли;
Если (Сред (Attr,СтрДлина (Attr) -2,1) = "1") и (Строгана (Attr) > 2)
Тогда Стр = Стр + "Системный " КонецЕсли;
Если (Сред (Attr, СтрДлина (Attr)-3,1) = "1") и (Стройна (Attr) > 3)
Тогда Стр = Стр + "Метка " КонецЕсли;
Если (Сред (Attr, СтрДлина (Attr)-5, 1) = "1") и (Стройна (Attr) > 5)
Тогда Стр = Стр + "Архивный КонецЕсли;
Если (Сред{Attr,СтрДіина(Attr)-1C, 1) = "1") и (СтрДлина (Attr) > 10) Тогда Стр = Стр + "Синоним КонецЕсли;
Если (Сред (Attr, СтрДлина (Attr)-11, 1) = "1") и (Стройна (Attr) > 11) Тогда Стр = Стр + "Сжатый " КонецЕсли;
Возврат Стр;
КонецФункции
// Основная часть кода.
// Создаем объект FileSystemObject
FSO = Новый СОМОбъект("Scripting.FileSystemObject");
// Получаем ссылку на объект
Folder = FSO.GetFolder ("с: \Program Files\") ;
// Выводим свойства папки
Сообщить ("Информация о папке c:\ProgramFiles\");
Сообщить("Атрибуты: " + ВернутьАттрибутыФайла(Folder));
Сообщить("Дата создания: " + Folder.DateCreated);
Сообщить("Дата последнего доступа: " + Folder.DateLastAccessed) ; Сообщить("Дата последнего изменения: " + Folder.DateLastModified); Сообщить("Признак корневой папки: " + Folder.IsRootFolder);
Сообщить("Имя: " + Folder.Name); //!!
Сообщить("Родительская папка: " + Folder.ParentFolder);
Сообщить("Путь: " + Folder.Path);
Сообщить("Короткое имя: " + Folder.ShortName);
Сообщить("Короткий путь : " + Folder.ShortPath);
Сообщить("Размер: " + Folder.Size);
Сообщить("Доступ к дочерним папкам: " + Folder.SubFolders);
Сообщить("Туре: " + Folder.Туре);
Объект File имеет подобный набор свойств.
?_Примечание
Свойство Name доступно для записи, т. е. с помощью его можно переименовать файл или папку.
Отдельного внимания заслуживает свойство SubFolders, которое предоставляет доступ к дочерним папкам. Данное свойство возвращает коллекцию Folders, которая содержит объекты Folder. Элементы коллекции системы "ІС.'Предприятие" в версии 8.0 можно получить с помощью конструкции Для каждого...из...Цикл...КонеиЦикла. Для версии 7.7 это можно сделать только с помощью внешней компоненты или СОМ-объекта (пример такого СОМ-объекта был рассмотрен в главе 2).
104 _
Проверка существования определенного диска, каталога или файла
Для проверки существования определенного диска, каталога или файла предназначены методы DriveExists, FciderExists и FileExists объекта FileSystemObject.
Данные методы возвращают Истина (в версии 7.7 метод возвращает -1), если диск, папка или файл, переданный в качестве параметров найден, иначе — ложь (в версии 7.7 метод возвращает 0).
Обычно данные методы применяются перед какими-либо действиями над дисками, файлами или папками, чтобы удостовериться, что они реально существуют и дальнейшая работа с ними не вызовет ошибок.
Приведем простой пример проверки наличия файла (листинг 3.4).
л* ДА ЛЗДУІТГСШТПІИЗТЯЯТУГОЩТТТПЯПНПИШИИИИ^ИИИИМИИИИЦЩІПІИИІІШИИІИШНВМЯИВІ **
,міщц||ц|м|ймц
¦ Листинг 3.4. ' Проверка на наличие файла
L__:___:_____________________
;
ИмяФайла = "c:\ProgramFiles\lcv8\bin\lcv8.exe";
FSO = Новый C0M06beKT("Scripting.FileSystem0bject");
Если FSO.FileExists(ИмяФайла) Тогда Сообщить("Файл существует!");
Иначе
Сообщить ("Файл не найден:'");
КонецЕсли;
Копирование файлов и папок
Для копирования файлов и папок предназначены методы copyFile и
CopyFolder объекта FileSystemObject, а также методы Fi і.е . Сору И Folder.Сору.
Рассмотрим простой пример копирования файла и папки (листинг 3.5).
Листинг 3.5
LSii
FSO = Новый СОМОбъект("Scripting.FileSystemObject") // Копирование файла
FSO.CopyFile("c:\Program Files\lCv77\ReadMe.txt", "с:\");
// Копирование папки
FSO.CopyFolder("c:\lc", "c:\2c");
Метод Copy File имеет важную особенность — в качестве первого параметра можно задавать маску копируемых файлов. Например, чтобы скопировать все файлы с расширением doc, необходимо вызвать метод следующим образом: CopyFile("с:\*.doc", "d:\").
Перемещение файлов и папок
Для перемещения файлов и папок предназначены методы Movefile и MoveFolder объекта FileSystemObject, ИЛИ МеТОДЫ File.Move И Folder.Move.
Рассмотрим пример перемещения файлов (листинг 3.6).
Г г "'¦¦¦’•"ГН
-' П “' 1 д* Гf ’ ” ' ' г - " -- - — — -------1; -------------------,
..Листинг 3.6. Перемещение файлов
----------________..._____.......—____________ _______________________.;_________________________J
FSO = Новый СОМОбъект("Scripting.FileSystemObject");
// Перемещение файлов
FSO.MoveFile("с:\Program Files\lcv8\*.htm", "c:\"J;
В приведенном коде перемещаются все файлы с расширением htm.
Удаление файлов и папок
Для удаления файлов и папок применяются методы DeieteFiie и DeleteFolder объекта FiieSystenObject, ИЛИ методы Fiіе.Delete И Folder.Delete.
Рассмотрим пример удаления файлов (листинг 3.7).
Листинг 3.7. Удаление файлов
 |
и |
FSO = Новый СОМОбъект("Scripting.FileSystemObject");
// Удаление файлов
FSO.DeieteFiie("с:\*.htm");
Приведенный выше код осуществляет удаление всех файлов с расширением htm.
Создание папок
Для создания папок предназначены методы FileSystemObject.CreateFolder и Folders.Add. Перед созданием вложенной папки необходимо удостовериться, что существует папка верхнего уровня, иначе появится ошибка. То есть данные методы не предназначены для создания группы вложенных папок.
Ниже приведен пример последовательного создания группы вложенных папок (листинг 3.8).
Листинг 3.8. Создание папок
FSO = Новый СОМОбъект("Scripting.FileSystemObject");
Корень = "c:\testV; FSO.CreateFolder(Корень);
// Создаем группу папок Для Номі = 1 По 5 Цикл
FSO.CreateFolder(Корень + "folder" + Номі);
Для Ном2 = 1 По 5 Цикл
FSO. CreateFolder (Корень + "folder" + Номі + "\subfolder" + Номі + + Ном2) ;
КонецЦикла;
КонецЦикла;
Работа с текстовыми файлами
С помощью WSH можно создавать текстовые файлы. Для этого предусмотрены методы FileSystemObject. CreateTextFile И Folders . CreateTextFile. Данные методы возвращают ссылку на объект Text stream и имеют три параметра:
? Filename — ИМЯ файла;
О overwrite — признак замены существующего файла (параметр является не обязательным);
П Unicode — признак создания файла в формате Unicode, иначе создается в формате ANSI (параметр является не обязательным).
С помощью методов write Line и writeBiankLines полученного объекта Textstream можно добавлять строки в файл.
Рассмотрим пример создания файла в формате ANSI и записи в него нескольких строк (листинг 3.9).
ИИИИМ^
МИИИЙЙШ I ШИП
кв н взяиі ЮНН Ц и k^rbbesr цииіі mm ¦¦¦¦ "лтд на
вп:
:'
: '
: 'Н?. . !
Листинг 3.9. Создание текстового файла
FSO = Новый СОМОбъект("Scripting.FileSysternObject") ;
// Получаем объект TextStream
File = FSO.CreateTextFiie("С:\Прігмер создания файла.txt", Истина, Ложь); File.WriteLine("Дата создания: " + РабочаяДата);
File.WriteBlankLines(2); // Добавляем 2 пустые строки
File.WriteLine("Добро пожаловать на сайт автора: ");
File.WriteLine("Copyright (С) Андрей Михайлов aka МА? 2004");
File.Close () ;
В WSH нельзя создавать файлы, отличные от текстовых.
Для открытия текстового файла, с целью чтения, записи или добавления НОВЫХ записей, Предназначены методы FileSysternObject, OpenTextFile И File.OpenTextStream. Данные методы имеют ряд параметров.
? Filename — ИМЯ файла.
О — режим открытия файла. Параметр может принимать следующие
значения:
• 1 — только для чтения;
• 2 — для записи;
• 8 — открытие файла и добавления строк в конец.
П Create — признак создания нового файла.
? Format — формат открываемого файла. Параметр может принимать следующие значения:
• -2 — используется формат, принятый по умолчанию в системе;
• -1 — Unicode;
• о - ASCII.
Для чтения всего текста из файла используется метод ReadAll () ¦ Для построчного чтения — ReadLineO. Рассмотрим пример открытия и чтения файла (листинг 3.10).
Листинг 3.10. Открытие и чтение текстового файла
ИмяФайла = "С:\Пример создания файла.txt”;
FSO = Новый СОМОбъект("Scripting.FileSysternObject");
// Проверяем, существует ли необходимый файл на диске
Если FSO.FileExists(ИмяФайла) Тогда
File = FSO.OpenTextFile(ИмяФайла, 1, Ложь, 0);
Сообщить(File.ReadAll());
Иначе
Сообщить("Файл не найден!");
КонецЕсли;
Получение списка всех доступных дисков, папок и файлов
Для получения списка всех доступных дисков у объекта FiieSystemObject существует коллекция Drives, содержащаяся В свойстве FiieSystemObject.Drives. Для папок, в этом случае, имеется коллекция Folders, содержащаяся в свойстве Folder.. Subfolders. Для файлов — коллекция Files, содержащаяся В свойстве Folder, Files.
Рассмотрим примеры вывода списка всех дисков (листинг 3.II) и списка всех файлов и папок (листинг 3.12).
сков
"Іистинг 3.11. Получение списка всех дос
—____________
FSO = Новый СОМОбъект("Scripting.FiieSystemObject");
// Выборка объектов из коллекции Drives Для каждого Диск Из FSO,Drives Цикл Стр = flncK.DriveLetter;
ЕслиflncK.DriveType= 3 Тогда
Стр Стр + - +flHCK.ShareName;
ИначеЕсли Диск.IsReady Тогда
Стр=Стр+ - +flncK.VolumeName; Иначе
Стр = Стр + - [Диск не найден]";
КонецЕсли;
Сообщить(Стр);
КонецЦикла;
Листинг 3.12. Получение списка всех дс
:папок и файлов
FSO = Новый СОМОбъект("Scripting.FiieSystemObject"); Folder = FSO.Get Folder("С:V);
// Выборка всех папок
Для каждого Папка Из Folder. SubFolciers Цикл Сообщить ("і" + ВРег (Папка. Name) + "j";;
КонецЦикла;
// Выборка всех файлов
Для каждого Файл Из Folder,Files Цикл Сообщить(НРег(Файл.Name));
КонецЦикла;
В листинге 3.12 приведен пример вывода списка только папок и файлов одного уровня, находящихся в корневом каталоге диска С:. Для построения дерева папок и файлов можно использовать данный пример, который должен находиться в функции, вызываемой рекурсивно.
Чтение свойств МРЗ-файлов
Как уже было показано ранее, с помощью объекта FiieSystem.object можно обращаться к файлам.
Рассмотрим следующую задачу. Допустим необходимо прочитать теги (Ш?і) МРЗ-файла. Тегами обычно называют свойства МРЗ-файла, включающими в себя информацию об авторе, названии, размере файла и т. п. Для решения данной задачи необходимо выполнить следующие действия:
1. Создать объект FileSystemObject для доступа к файлам.
2. Проверить наличие необходимого файла на диске.
3. Получить ссылку на объект File с помощью метода GetFile.
4. Прочитать размер файла с помощью метода File, size и проверить, чтобы он был не менее 128 байт.
5. Открыть файл для чтения. Метод File,Cper.AsTextstream(i) возвращает объект Stream.
6. Получить строку, содержащую последние 128 байт, в которых и хранятся теги МРЗ-файла.
7. Проверить наличие в начале полученной строки символов "TAG".
8. Выделить из строки нужные теги согласно спецификации МРЗ-файлов. Рассмотрим пример чтения тегов МРЗ-файла (листинг 3.13).
— -¦ ....................--г-ц”,. ; • -or —¦-г.........-...........-------------------: "ЛДГ
j Листинг 3.13. Чтение тегов МРЗ-файла
// Переменная ИмяФайла должна содержать строку, содержащую путь к MP3-файлу Если (ИмяФайла = Неопределено) или СокрЛП (ИмяФайла = "") Тогда Сообщить("Не указано имя файла!");
Возврат;
КонецЕсли;
// Создание объекта FileSystemObject Попытка
FSO = Новый СОМОбъект("Scripting.FileSystemObject");
Исключение
Сообщить ("Ошибка создания объекта! ") ;
Возврат;
КонецПопытки;
// Проверка на наличие файла Если НЕ FSO.FileExists(ИмяФайла) Тогда Сообщить("Файл не найден!");
Возврат;
КонецЕсли;
// Получаем размер файла и проверяем, чтоб он был не менее минимально допустимого
File = FSO.GetFile(ИмяФайла);
FileLength = File,Size;
Если FileLength <= 128 Тогда
Сообщить("Файл малого размера!”);
Возврат;
КонецЕсли;
// Открываем файл для чтения (параметр = 1)
Попытка
Stream = File.OpenAsTextStream(1);
Исключение
Сообщить("Невозможно открыть файл!");
Возврат;
КонецПопыт ки;
// Считываем строку с информацией (ІОЗ?І)
Stream.Skip(FileLength - 128);
Попытка
Data = Stream.Read(128);
Использование скриптов WSH_
Исключение
Сообщить("Невозможно прочитать файл!");
Возврат,-КонецПопытки;
// Закрываем поток и удаляем объекты Stream.Close();
File = Неопределено;
FSO = Неопределено;
// Проверяем полученную строку на корректность Если рев (Data, 3) <> "TAG" Тогда
Сообщить ("Неверный формат файла! "> ;
Возврат.,-КонецЕсли,-
// Перечисляем все жанры, встречающиеся в спецификации к МРЗ-файлам Жанры = Новый Массив();
Жанры.Добавить("Blues");
Жанры.Добавить("Classic Rock");
// и
Жанры.Добавить("JPop");
Жанры.Добавить("Synth Pop");
// Выделяем из строки нужные поля Название = СокрЛЩСред{Data
г 4, 30));
Артист = СокрЛП(Сред(Data, 34, 30));
Альбом = СокрЛП(Сред(Data, 64, 30));
Год = СокрЛП(Сред(Data, 94, 4));
Комментарий = СокрЛП(Сред(Data, 98, 30));
Трек = КодСимвола(Сред(Data, 127, 1));
НомерЖанра = (Сред (Data, 128,
Если НомерЖанра < Жанры.Количество() Тогда Жанр = Жанры[НомерЖанра];
Иначе Жанр =
КонецЕсли;
// Выводим теги
Сообщить ("Название: ’’ + Название);
Сообщить("Артист: ' + Артист);
Сообщить ("Альбом: " + Альбом);
Сообщить ("Год: " + .Год) ;
Сообщить("Комментарий: " + Комментарий);
Сообщить("Трек: " + Трек);
Сообщить("Жанр: ” + Жанр);
Файлы МРЗ хранятся в формате Unicode. Однако, к сожалению, версия 7.7 системы "1C:Предприятие" не позволяет работать с такими форматами. В связи с этим, напрямую в версии 7.7 теги МРЗ-файлов прочитать не удается. Для чтения тегов в данном случае нужно использовать внешние компоненты или объект MSScriptControl, ScriptConrrol, вынося весь код в VB-скрипт.
Специальные папки
Бывают ситуации, когда необходимо записать какой-либо файл в специальную папку (на рабочий стол, в избранное, включить в автозагрузку и т. п.). В английской версии Windows существует папка Startup (Автозагрузка), и если вы, например, укажите путь C:\WINЕЮ\?8\Главное меню\Программы\ Автозагрузка, то эта запись сработает только в русской версии Windows и нигде больше. Чтобы избежать этих проблем, был создан список специальных папок. Чтобы получить доступ к какой-либо специальной папке, можно воспользоваться методом speciaiFoiders объекта wshshell. Данный метод имеет один параметр — строку, описывающую имя специальной папки. Рассмотрим возможные параметры метода SpeciaiFoiders:
П AiiusersDesktop — рабочий стол (для всех пользователей);
О AiiusersStartMenu — меню Старт (для всех пользователей);
? AiiusersPrograms — меню Программы (для всех пользователей);
? Allusers startup — Автозагрузка (для всех пользователей);
? Desktop — рабочий стол;
П Favorites — Избранное;
П Fonts — шрифты;
? MyDocuments — Мои документы;
О NetHood — папка NetHood;
О PrintHood — папка PrintHood;
П Programs — меню Программы;
О Recent — последние запуски;
П г : : — меню Отправить;
П startMenu — меню Старт;
П startup — Автозагрузка;
О Templates— шаблоны.
Рассмотрим пример вывода некоторых специальных папок в системе "1С:Предприятие" версии 7.7 (листинг 3.14).
Листинг 3.14. Вывод специальных папок в версии 7.7
—-Aver ‘... __I— -сіжсЗсІ л )ТдйизЯЗ.і.С _n __ _ _ пі^иййЯйиЯЯв
WSHShell = СоздатьОбъект("WScript.Shell");
Сообщить("Автозагрузка: " + WshShell.SpecialFolders("Startup")); Сообщить("Программы: " + WshShell.SpecialFolders("Programs")); Сообщить ("Мои документы: " + WshShell.SpecialFolders ("MyDocuments") ) ; Сообщить("Шрифты: '' + WshShell.SpecialFolders("Fonts"));
Сообщить("Меню ’Старт': " + WshShell.SpecialFolders("StartMenu"));
В версии 7.7 все довольно просто и прозрачно. А вот в 8.0, по непонятным причинам, данный код вызывает ошибку. Чтобы обойти эту ошибку, можно использовать объект MSScriptControl. Scrip-Control, в котором и получать путь, указывающий местоположение специальных папок, после чего возвращать их в контекст системы "IС:Предприятие". Рассмотрим пример получения специальных папок через ?В-скрипт (листинг 3.15).
End Function");
// Запускаем функцию SpecialFolders с параметром <Имя>
ИмяПапки = Ctrl.Run("SpecialFolders", Имя);
Исключение
// В случае неудачного выполнения возвращаем — Неопределено ИмяПапки = Неопределено,-
КонецПопытки;
Возврат ИмяПапки;
КонецФункции
Сообщить("Рабочий стол: " + ПолучитьСистемнуюПапку("Desktop"));
Сообщить ("Мои документы: " + ПолучитьСистемнуюПапку ("MyDocuments") ) ;
Сообщить("Избранное: " + ПолучитьСистемнуюПапку("Recent"));
Работа с ярлыками Windows
С помощью WSH можно создавать ярлыки для файлов и адресов сайтов в Интернете (URL). Для этого используется объект Wshshell.
Создание ярлыков для файлов
Для создания ярлыка используется метод Createshortcut объекта Wshshell, который имеет единственный параметр — полное имя файла для ярлыка.
Приведем пример создания ярлыка для запуска системы SQL-версии ”1С:Предприятие 7.7" (листинг 3.16).
Листинг 3.16. Создание ярлыка для файла
Shell = Новый СОМОбъект("WScript.Shell");
DesktopPath = ПолучитьСистемнуюПапку("Desktop");
Link = Shell.GreateShorrcut(Desktop-Path + "\test.Ink"); Link.Arguments = ”1 2 3";
Link. Description = ''Тестовый пример” ;
Link.HotKev = "CTRL+ALTt-SHIFT+X";
Link,IconLocation = "lcvis.exe, 1”;
Link.TargetPath = "c:\ProgramFiles\lCv77\BIN\lcv7s.exe"; Link.WindowStyle = 3;
Link.WorkingDirectory = "c:\ProgramFiles\lCv77\BIN\”; Link.Save();
В данном примере метод Createshortcut возвращает ссылку на объект Link. Для описания параметров ярлыка сначала заполняются основные свойства объект Link. После этого он сохраняется с помощью метода save о .
Объект Link имеет следующие свойства:
П Arguments — описание параметров запуска файла;
О Description — текстовое описание к ярлыку;
П HotKey — комбинация клавиш для быстрого запуска ярлыка;
П iconLocation — файл с иконкой;
? TargetPath — полное имя запускаемого файла;
П windowstyle — способ запуска программы, причем свойство может принимать следующие значения:
• з — при запуске окно программы будет развернуто на весь экран;
• 4 — устанавливает стандартный размер окна;
• 7 — окно будет свернуто в значок на панели задач;
П WorkingDirectory — рабочая папка.
Копирование, перемещение и удаление ярлыков
Для копирования, перемещения и удаления ярлыков применяются такие же методы, что и для работы с файлами. А именно CopyFile, Move File и DeleteFile (листинг 3.17).
Листинг 3.17. Копирование, перемещение и удаление ярлыка
Shell = Новый СОМОбъект("WScript.Shell");
FSO = Новый СОМОбъект("Scripting.FileSystemObject");
DesktopPath = ПолучитьСистеьшуюНапку("Desktop") + "\test.lnk";
NewPath =
// Копирование ярлыка
FSO.CopyFile(DesktopPath, NewPath); .
// Перемещение ярлыка
MyDocumentsPath = ПолучитьСистемнуюПапку("MyDccurnents”) + "\test.lnk”; FSO.MoveFile(NewPath, MyDocumentsPath);
// Удаление ярлыка
FSO.DeleteFile(MyDocumentsPath);
Создание ярлыков для URL-адресов
Помимо ярлыков для файлов, WSH позволяет создавать ярлыки для запуска Web-страниц. В этом случае применяется все тот же метод CreateShortcut, но в качестве аргумента необходимо использовать файл с расширением URL и в свойстве TargetPath указывать адрес интернет-страницы.
Рассмотрим пример создания на рабочем столе ярлыка для запуска форума, посвященного системе ”1С:Предприятие" (листинг 3.18).
! Листинг 3.18. Создание ярлыка для URL-адреса
5..........................................................................................-......................і.................................._
f_J
Shell = Новый СОМОбъект("WScript.Shell");
DesktopPath = ПолучитьСистемнуюПапку("Desktop");
URL = Shell,CreateShortcut(DesktopPath + "\ERP Group.url");
URL.TargetPath = "";
URL.Save();
URL = Shell.CreateShortcut (DesktopPath + "\Batu форум.url") ;
URL.TargetPath = "";
URL.Save();
Работа с системным реестром Windows Понятие реестра
Реестр — это база данных операционной системы, содержащая данные о текущей конфигурации программных и аппаратных средств вычислительной системы. Физически вся информация реестра разбита на два файла: SYSTEM.DAT и USER.DAT, находящиеся в каталоге Windows.
Чему действительно необходимо уделить внимание, так это структуре реестра. Он содержит шесть корневых разделов (ветвей), на которых ниже остановимся подробнее. Каждый из них включает подразделы, отображаемые в левой части окна в виде значка папки. Конечным элементом дерева реестра являются ключи или параметры, делящиеся на три типа:
О строковые (например, "C:\Windows");
О двоичные (например, 10 82 АО 8F), причем максимальная длина такого ключа 16 Кбайт;
П типа DWORD, которые занимают по 4 байта и отображаются в шестнадцатеричном и в десятичном виде (например, 0x00000020 (32), причем в скобках указано десятичное значение ключа).
Рассмотрим корневые разделы раздела, точнее, какая информация в них содержится.
П HKEYSLASSES'_ROO/ В этом разделе содержится информация о зарегистрированных в Windows типах файлов, что позволяет открывать их по двойному щелчку мыши, а также информация об OLE-серверах (подробнее о технологии OLE см. в главе 4).
П HKEY_CURRENT_USIr:> Здесь содержатся настройки оболочки пользователя (например, "Рабочего стола", меню Пуск и т. п.), вошедшего в среду Windows. Они дублируют содержимое подраздела HKEY_USER\name, где name — имя пользователя, вошедшего в среду Windows. Если на компьютере работает один пользователь и используется обычный вход в среду операционной системы, то значения раздела берутся из подраздела HKEY_USERS\.DEFAULT.
О HKEYJ.OCAL JMCHIN. Этот раздел содержит информацию, относящуюся к компьютеру: драйверы, установленное программное обеспечение и его настройки.
П IIKEYUSERS Содержит настройки оболочки Windows для всех пользователей. Как было сказано выше, именно из этого раздела информация копируется в раздел HKEY CURRENT USER. Все изменения в HKCU (сокращенное название раздела HKEY_CURRENT_USER) автоматически переносятся в нки.
П HKEY_ сиRRENT_CONFl' В этом разделе содержится информация о конфигурации устройств Plug-and-Play и сведения о конфигурации компьютера с переменным составом аппаратных средств.
П HKEYDYN DAT/ Здесь хранятся динамические данные о состоянии различных устройств, установленных на компьютере. Именно сведения этой ветви отображаются в окне Система | Устройства | Свойства, вызываемого из Панели управления. Данные этого раздела изменяются самой операционной системой, так что редактировать что-либо вручную не желательно.
Запись, чтение и удаление ветвей реестра
С помощью Windows Script Host возможно в "невидимом" режиме добавлять какую-либо информацию в реестр. Также возможно считывать информацию, создавать и удалять разделы и параметры. Пользователь может даже не подозревать, что на его компьютере выполняются какие-то работы. Очевидно, что многим администраторам такая возможность придется по душе.
Для работы с реестром в WSI1 предусмотрены методы Regwrite, RegRead и RegDelete объекта Wshshell.
Метод Regwrite предназначен для создания ветвей реестра и записи в них параметров. Метод содержит три аргумента.
П Name — полное имя ветви или параметра. Если в конце имени стоит обратный слэш (\), то аргумент является ветвью, иначе — параметром;
П Value — значение параметра или значение по умолчанию в случае создания ветви;
? туре — тип значения (REG_SZ — строковый параметр, REG_EXPAND_SZ — расширяемый строковый параметр, reg_dword — числовой параметр, REG_BINARY - двоичный параметр).
Метод RegRead предназначен для чтения значения параметра и имеет один параметр — полное имя ветви или параметра реестра. В случае указания имени ветви (с обратным слэшем на конце) метод возвращает значения параметра по умолчанию.
Метод RegDelete предназначен для удаления ветви или параметра реестра и имеет один параметр — полное имя ветви или параметра.
Рассмотрим пример работы с системным реестром (листинг 3.19).
Г ' ----------------т ’— ---------------------------------—;—- --— .- —-------— ---- j
: Листинг3.19. Работа с системным реестром Windows
Shell = Новый СОМОбъект("WScript.Shell");
Key = "HKEY_CURRENT_USER\";
//Создание ветки HCU\TestKey\
Shell.RegWrite(Key + "TestKeyV, "testkeydefault");
// Создание строкового параметра stringl
Shell.RegWrite(Key + "TestKey\stringl", "testkeystring");
// Создание параметра типа DWORD
Shell.RegWrite (Key + "TestKey\int", 123, "REG_DWORD");
// Чтение созданных параметров
Сообщить(Shell.RegRead(Key + "TestKeyV)); Сообщить(Shell.RegRead(Key + "TestKeyVstringl")); Сообщить(Shell.RegRead(Key + "TestKey\int"));
// Удаление ветки HCU\TestKey\
Shell.RegDelete (Key + "TestKeyV) ;
Работа с сетевыми ресурсами
Для работы с сетевыми ресурсами в WSH предназначен объект wshNetwork. Данный объект позволяет решать такие задачи, как подключения к сети, инсталляцию принтеров, назначение буквенных обозначений сетевым дискам, получение информации об имени пользователя или компьютера и так далее.
Рассмотрим основные свойства объекта Ws hNetwork:
? ComputerName — возвращает имя компьютера;
П UserDomain — возвращает имя домена, в котором зарегистрирован пользователь;
? UserName — возвращает имя пользователя.
Рассмотрим основные методы объекта W shNetwork:
П MapNetworkDrive — присваивает назначенную пользователем букву сетевому диску;
П EnurnNetworkDrives — возвращает список подключенных сетевых дисков;
П RemoveNetworkDrive — отключает Сетевой ДИСК;
П AddWindowoPrinterConnection — позволяет установить новый принтер в Windows, т. е. указать путь к принтеру и инициировать установку драйверов;
П AddPrinterConnect ion — подключает сетевой принтер;
П RemovePrinterConnection — отключает сетевой принтер; ПЗебОеСаи^Ргіг^ег — задает принтер по умолчанию;
П EnumPrinterConnections — возвращает список подключенных принтеров.
Получение информации о сетевой идентификации
Для начала разберемся, как работают методы ComputerName, UserDomain
И UserName объекта WshNetwork.
Рассмотрим небольшой пример, в котором выводятся сведения об имени пользователя, имени компьютера и домене (листинг 3.20).
і Листинг 3^20. Вывод информации об имени пользователя, имени компьютера і и домене
____ - _—i-hi. .ЦгаХКыгаілІ — ¦ — — ИИ—?----------------------—-— — —
Network = Новый СОМОбъект("WScript.Network");
Сообщить("Имя пользователя: + Network,UserName;;
Сообщить ("Имя компьютера: " + Network.ComputerName);
Сообщить ("Имя домена: " + Network.UserDomain) ;
В данном примере использовались свойства объекта wshNetwork: userName, ComputerName И userDomain. С ИХ ПОМОЩЬЮ была Получена информация
0 подключившемся пользователе. Эта информация может понадобиться, например, если на компьютере работает несколько пользователей и им нужен доступ к разным сетевым дискам. Таким образом, можно обеспечить автоматическое подключение этих дисков в зависимости от того, какой пользователь сейчас работает.
Работа с сетевыми дисками
Перед тем как подключать какой-либо сетевой диск, необходимо сначала определить — подключен ли уже нужный диск или нет. Рассмотрим пример вывода информации о том, какие сетевые диски в данный момент времени уже подключены (листинг 3.21).
..... ¦ ..............¦ ''щнншкг——~~
ТГТЩ|ННН1^В
Листинг 3.21. Вывод сііиска подключенных сетевых дисков
_______НЯНя__¦¦¦¦____ЯНННН________I___‘..і..._____1____ннпнннннв
Network = Новый СОМОбъект("WScript.Network");
// Получаем коллекцию сетевых дисков Drives = Network.EnumNetworkDrives();
Для каждого Диск Из Drives Цикл
Сообщить(Диск);
КонецЦикла;
Для подключения и отключения сетевых дисков существуют методы MapNetworkDrive И RemoveNetworkDrive соответственно. Рассмотрим пример подключения сетевого диска (листинг 3.22).
1 Листинг 3.22. Подключение сетевого диска
--------------і. ______, „_______________________________
Net = Новый СОМОбъект("WScript.Network");
Попытка
Net.MapNetworkDrive("M, "\\Server\DATA\CRM");
Исключение
Сообщить("Невозможно произвести подключение!");
КонецПопыт ки;
В данном примере в методе MapNetworkDrive используются только первые два параметра: буква, на которую будет подключаться диск, и, собственно, путь к сетевому диску. Третий параметр (истина или ложь) указывает, осуществлять или нет подключение этого диска при следующем входе пользо-
вателя. Четвертый и пятый параметры определяют имя пользователя и его пароль, с которыми может подключаться диск. Лучше организовать доступ к диску нужным пользователям на сервере средствами самой ОС. Тогда посторонние люди не смогут узнать пароль для работы с этим ресурсом.
При отключении сетевого диска используется метод RemoveNetworkDrive, который имеет три параметра. Обязателен только первый параметр — буква отключаемого диска. Второй параметр — отключает диск (если истина) даже если он в этот момент используется. Третий параметр сохраняет настройки для следующих входов пользователя.
Работа с сетевыми принтерами
В WshNetwork реализовано несколько методов сетевого доступа к принтерам. Чтобы явно установить связь принтера с портом, следует использовать метод AddPrinterConnection. Для соединения с принтерами в среде Windows (и автоматической установки драйверов на машинах с операционными системами Windows 2000/XP/NT и Server 2003) нужно применить метод AddWindowsPr interconnect ion, который представлен в листингах 3.23 и 3.24. Метод SetDefauitPrinter назначает компьютеру принтер, связь с которым устанавливается по умолчанию.
і Листинг 3.23. Подключение сетевого принтера в Windows NTOOOO/XP/Server 2003
Network = Новый СОМОбъект("WScript.Network");
Попытка
Network.AddWindowsPrinterConnection("\\ServerName\PrinterName"); Network.SetDefauitPrinter("\\ServerName\PrinterName");
Исключение
Сообщить("Невозможно произвести подключение!");
КонецПопытки;
Листинг 3.24. Подключение сетевого принтера в Windows 9х/МЕ
Network = Новый СОМОбъект("WScript.Network");
Попытка
Network.AddWindowsPrinterConnection("\\ServerName\
PrinterName", ” Lexmark Optra S 1650“');
Network.SetDefauitPrinter("\\ServerName\PrinterName");
Исключение
Сообщить("Невозможно произвести подключение!");
КонецПопытки;
Данные примеры подключают сетевой принтер с именем PrinterName, находящийся на сервере ServerName и устанавливают его в качестве принтера, используемого по умолчанию.
Для отключения сетевого принтера используется метод RemovePrinterConnection, который имеет три параметра:
? первый параметр — буква отключаемого диска;
П второй параметр — (если истина) отключает принтер, даже если он в этот момент времени используется;
П третий параметр — признак сохранения настройки для следующих входов пользователя.
Обязательным является только первый параметр.
Как и в случае с сетевыми дисками, объект wshNetwork позволяет определить список подключенных сетевых принтеров. Для этого используется метод EnumPrinterConnections, который возвращает коллекцию принтеров. Данную коллекцию, как и любую другую, в системе "ІС:Предпрпятие" 8.0 можно перебрать С ПОМОЩЬЮ КОНСТРУКЦИИ Для...каждого из...Цикл...КонецЦикла. В версии 7.7 системы "1C:Предприятие" — с помощью объекта coMServices.
Управление программами
Под управлением программ будем понимать: запуск программ; активизацию их окон; имитацию нажатия, в границах этих окон, различных клавиш клавиатуры. Для решения перечисленных задач нужны всего три функции.
? SendKeys (string) — имитируется нажатие клавиши или последовательности клавиш на клавиатуре, указанных в единственном параметре.
О AppActivate (Title) — активизирует приложение по заголовку окна или по идентификатору процесса.
П Run (Command, window-style, WaitOnReturn) — запускает Приложение ПО командной строке. Параметры функции имеют следующее назначение:
• первый параметр (command) — определяет запускаемое приложение;
• второй параметр (WindowStyle) — определяет стиль окна и может принимать значения:
О о — запускать программу в скрытом окне;
_Примечание_^
Если вы попытаетесь запустить приложение с таким значением второй переменной, то окно программы будет невидимым и кнопка на панели задач не будет создана. Удостовериться, что приложение действительно запустилось, можно в диспетчере задач, который вызывается по комбинации клавиш <Ctrl>+<Alt>+<Del>.
О 1 — запустить программу в оригинальном размере и положении окна;
О 2 — запустить программу минимизированной;
О з — запустить программу максимизированной (на полный экран);
О 4 — запустить программу с последним использованным размером и положением окна на экране;
О 5 — запустить программу с текущими размером и позицией окна на экране;
О б — запустить программу минимизированной (при этом активным будет следующее окно в последовательности окон активных приложений Windows);
• третий параметр (значения — истина или ложь) указывает на необходимость дождаться завершения выполнения приложения.
В качестве параметра метода sendKeуз можно указывать как алфавитноцифровые символы, так и символы специальных клавиш, например, <Enter>, <Tab>, <F1>...<F12>, <Alt>, <Shift>, <Ctrl> и т. п. В табл. 3.1 приведены специальные обозначения для этих клавиш.
Таблица 3.1. Обозначения специальных клавиш
Клавиша Обозначение
{BACKSPACE}, {BS}, или {BKSP} {BREAK}
{CAPSLOCK}
{DELETE} или {DEL}
{DOWN}
{END}
{ENTER} или ~
{ESC}
{HELP}
{HOME}
{INSERT} или {INS}
{LEFT}
{NUMLOCK}
{PGDN}
{PGUP}
<BACKSPACE>
<BREAK>
<CAPSLOCK>
<DEL> или <DELETE>
<DOWN ARROW>
<END>
<ENTER>
<ESC>
<HELP>
<HOME>
<INS или INSERT>
<LEFT ARROW>
<NUM LOCK>
<PAGE DOWN>
<PAGE UP>
Таблица 3.1 (окончание)
Клавиша
Обозначение
{PRTSC}
{RIGHT}
{SCROLLLOCK}
{TAB}
{UP}
{F1}
{F2}
{F3}
{F4}
{F5}
{F6}
{F7}
{F8}
{F9}
{F10}
{F11}
{F12}
<PRINT SCREEN> <RIGHT ARROW> <SCROLLLOCK> <TAB>
<UP ARROW> <F1>
<F2>
<F3>
<F4>
<F5>
<F6>
<F7>
<F8 >
,<F9>
<F10>
<F11>
<F12>
Для указания клавиш <Alt>, <Shift>, <Ctrl> существуют специальные коды: ? <Shift> -П <Ctrl>
Я <Alt>
Например, если вы хотите передать нажатие нескольких клавиш с нажатой клавишей <Shift>, надо выполнять команду WshShell. SendKeys ("+ (ABC) ") , если только одной клавиши (первую, указанную в последовательности клавиш) — команду WshShell.SendKeys("+АВС") .
Примечание
Необходимо заметить, что такие символы, как "
Л" и зарезервированы под обозначение специальных клавиш, так что просто так передать эти (и некоторые другие) символы не удастся. Для этого надо заключить их в фигурные скобки, например, "{+}", "{%}" и т. д. Вот полный список символов, которые необходимо заключать в фигурные скобки: +,
Л, %, ~, (,), {,}, [, ].
Если вы хотите передать несколько нажатий подряд одной клавиши, то вовсе не обязательно все их набирать в скрипте. Можно просто указать количество повторений. Так, строка wshShell. sendKeys (" {А 100}'') эквивалентна сотне нажатий клавиши "А". Правда, есть ограничение на количество возможных повторений нажатия клавиш. Это значение лежит где-то между 8150 и 8180 раз. При превышении этого значения будет выдана ошибка.
Управление калькулятором
В листинге 3.25 приведен код, демонстрирующий, как запустить калькулятор и рассчитать значение произведения чисел 2 и 3.
ЛистингЗ.25. Управление калькулятором
WshShell = Новый СОМОбъект("WScript.Shell");
// Запускаем калькулятор
WshShell.Run("calc");
// Ждем пока калькулятор загрузится (для русской версии ОС)
Пока Не WshShell.AppActivate("Калькулятор") Цикл КонецЦикла;
// Эмулируем нажатие клавиш
WshShell.SendKeys("1{+}");
WshShell.SendKeys("2");
WshShell.SendKeys;
WshShell.SendKeys("*3");
WshShell.SendKeys;
Приведенный пример запускает калькулятор, ждет пока он зафузится и после активации его окна эмулирует последовательное нажатие клавиш. В результате выполнения в окне калькулятора появится цифра 9.
Управление Microsoft Word
Рассмотрим еще один интересный пример, в котором запускается Microsoft Word и в нем печатается некоторый текст (листинг 3.26).
................................ ......................................................................................................................
Листинг 3.26. Управление Microsoft Word
WshShell = Новый СОМОбъект ("WScript.Shell") ;
Если WshShell.AppActivate("Word") Тогда
WshShell.SendKeys("Welcome to ");
WshShell.SendKeys() ; // Enter
WshShell.SendKeys("%") ; // Alt
// Спускаемся на 4 пункта вниз
WshShell.SendKeys("{DOWN}{DOWN}{DOWN}{DOWN}");
WshShell.SendKeys(); // Enter
WshShell.SendKeys("c:\test.doc") ;
WshShell.SendKeys("-") ; // Enter
Иначе
Сообщить ( "Microsoft Word не запушен'"';;
КонецЕсли;
Реализация примера подразумевает, что у вас уже запущен MS Word с пустой страницей. В результате выполнения в документе напечатается текст и будет сохранен под именем c:\test.doc, но только в том случае, если пункт меню Сохранить находится четвертым сверху.
Запуск встроенного калькулятора
В системе " 1C: Предприятие" (в версиях 7.7 и 8.0) существует встроенный калькулятор, который вызывается при нажатии комбинации клавиш <Ctrl>+<F2> или через пункт меню Сервис | Калькулятор. С помощью метода SendKeys объекта WshShell можно программно вызвать встроенный калькулятор (листинг 3.27).
Листинг 3.27. Запуск встроенного калькулятора
WshShell = Новый СОМОбъект("WScript.Shell") ,
WshShell. SendKeys (
,,A{F2}") ; // Ctrl+F2
Закрытие окна сообщений в системе "1 С:Предприятие"
В системе '"IС:Предприятие" (в версиях 7.7 и 8.0) при вызове оператора сообщить появляется окно сообщений. Часто бывает ситуация, когда необ-
ходимо программно закрыть это окно. Оно закрывается при нажатии комбинации клавиш < Ctrl>+< Shift>+<Z>. Приведем пример закрытия окна сообщений (листинг 3.28).
........¦¦¦КХШШ
Листинг 3.28. Закрытие окна сообщений
ШШШЯШИШШЯЯШШВПЯвйЯИЯШШШШШШШЯШІ__ЯДШИшИЯИШвШиЮІІшІДИИІ____I
// с помощью вывода текста показываем окно сообщений Для Ном = 1 По 100 Цикл
Сообщить("Текст " + Ном);
КонецЦйкла;
WshShell = Новый СОМОбъект("WScript.Shell");
// Закрываем окне сообщений
WshShell. SendKeys (
,,л+ (z) ") ; // <Ctrl>+<Shift>+<Z>
WshShell.SendKeys("
л+(я)"); // для русской раскладки
Содержание раздела