Это короткий фрагмент для ознакомления с книгой.
Введение
Несколько лет назад компания Microsoft предложила в качестве инструмента разработки и выполнения специальных сценариев для операционной системы Windows сервер сценариев Windows Script Host (WSH), различные версии которого входят в стандартную поставку Windows 98/2000/ХР (до этого на уровне операционной системы поддерживались только пришедшие из MS-DOS командные файлы). Сценарии WSH могут создаваться с помощью специализированных языков (например, Microsoft Visual Basic Script Edition (VBScript) или Microsoft JScript) и использовать любые объекты ActiveX, зарегистрированные в системе, что и определяет чрезвычайно мощные возможности таких сценариев. Собственная объектная модель WSH позволяет из сценариев работать с файловой системой, системным реестром, специальными папками и ярлыками Windows, ресурсами локальной сети, а также запускать процессы и контролировать ход их выполнения. Еще одна важная задача, которую решают сценарии WSH, — это организация взаимодействия с разработанными Microsoft современными ActiveX- технологиями: □ ActiveX Data Object (ADO) — доступ к базам данных разных форматов; □ Active Directory Service Interface (ADSI) — работа со службами каталогов (Active Directory для Windows 2000, Windows Directory Service для Windows NT 4.0 и т.д.); □ Windows Management Instrumentation (WMI) — управление операционной системой Windows. Надо сказать, что в то время как за рубежом сценариям WSH и используемым в них ActiveX-технологиям Microsoft посвящено много серьезных и объемных книг [10, 20–28], на русском языке подобных специальных книг пока немного (переводы книг Г. Борна [3] и Т. Экка [18], а также предыдущая книга автора [8]). В последнее время, правда, появилось довольно много публикаций о WSH, ADSI и WMI в журналах [1, 2, 6, 7, 9–16, 29]; краткое описание WSH и примеры сценариев приводятся в некоторых книгах, посвященных Windows 2000/ХР (например, в [5] имеются примеры работы с системным реестром). Отметим также, что в последней версии WSH 5.6, которая является неотъемлемой частью Windows ХР, появились новые возможности (запуск сценариев на удаленных машинах, использование для сценариев политики ограниченного использования программ и т.д.), описания которых в русскоязычной литературе на момент написания книги автору не встречалось. Итак, целью настоящей книги является решение следующих задач. □ Детально описать объектные модели, использующиеся в WSH 5.6 и в технологии Windows Script Components (WSC), и дать примеры использования этих объектных моделей. □ Привести практические примеры применения в сценариях WSH технологий ADO, ADSI и WMI, а также показать, каким образом из сценариев можно просматривать или изменять файлы в формате XML и управлять приложениями пакета Microsoft Office. □ Обсудить проблемы безопасности, возникающие при работе с WSH, и описать способы решения этих проблем в Windows ХР.Для кого предназначена эта книга
Книга может быть полезна пользователям, программистам и администраторам Windows, которые желают получить систематизированную информацию о мощных возможностях ActiveX-сценариев WSH 5.6, а также об использовании в сценариях смежных технологий Microsoft (WMI, ADSI, ADO, WSC). Информация, представленная в книге, позволяет применять ее и в качестве последовательного руководства по разработке сценариев Windows различной степени сложности (от простых JScript- или VBScript-сценариев, работающих без какого-либо вывода на экран, до многозадачных WS-файлов с XML-разметкой, предоставляющих пользователю полноценный графический интерфейс), и как справочник по объектам и XML-элементам, которые используются в WSH 5.6 (в том числе и для создания СОМ-объектов по технологии WSC). Многие сценарии, приведенные в книге, могут применяться практически без изменений для решения конкретных практических задач по администрированию Windows (особенно это относится к примерам главы 11). Кроме этого, сведения, которые приведены в главе 4, помогут администраторам настроить политику безопасности для работы со сценариями WSH. При изучении материала книги от читателя может потребоваться некоторое знакомство с языками JScript и VBScript (краткие справочники по этим языкам включены в приложения), а также понимание основ объектно-ориентированного программирования и СОМ-технологий.Структура книги
В главе 1 приводятся начальные сведения о назначении и возможностях WSH. Здесь показан процесс создания и запуска простейших сценариев на языках VBScript и JScript. Основная часть главы 1 посвящена рассмотрению собственных объектов WSH. Подробно описаны свойства и методы этих объектов, с помощью которых в сценариях можно: □ использовать внешние объекты ActiveX и ресурсы локальной сети; □ выводить информацию в стандартный выходной поток или в окно Windows; □ считывать данные из стандартного входного потока; □ получать доступ к специальным папкам Windows и системному реестру; □ создавать или изменять переменные среды и ярлыки Windows; □ запускать процессы на локальной или удаленной рабочей станции. В главе 2 рассмотрены примеры сценариев, в которых используются стандартные объекты WSH (каждый из примеров реализован как на языке JScript, так и на языке VBScript). Среди прочих задач здесь освещены такие новые возможности WSH 5.6, как использование входных и выходных потоков дочерних приложений и контроль за ходом выполнения сценариев, запущенных на удаленном компьютере. Глава 3 посвящена рассмотрению многозадачных сценариев WSH с разметкой XML. Здесь подробно описана объектная схема WS XML и приведены примеры сценариев, реализующих такие возможности этой схемы, как применение разных языков в одном задании или использование констант из библиотек типов внешних объектов. В главе 4 обсуждаются вопросы безопасности, возникающие при работе со сценариями WSH (незащищенность исходного кода сценария, простота написания и распространения сценариев-вирусов и т.д.). В этой главе описано, каким образом можно создавать зашифрованные файлы сценариев и добавлять к сценариям цифровые подписи для указания автора сценария. Кроме этого, рассмотрен процесс организации политик безопасности для сценариев WSH, позволяющих, например, запретить выполнение неподписанных сценариев любого типа или вообще заблокировать WSH для определенных пользователей. В главе 5 показано, каким образом можно получить полный доступ к файловой системе компьютера с помощью объектаFileSystemObject
. Здесь объяснено, какие свойства и методы нужно использовать для выполнения тех или иных файловых операций, а также приведено подробное описание этих свойств и методов. Также в этой главе приведены несколько полезных сценариев, позволяющих, например, производить поиск нужных файлов с использованием регулярных выражений или перемещать файлы из одного каталога в другой с ведением журнала действий.
В главе 6 рассматриваются практические вопросы обработки из сценариев файлов в формате XML. В качестве примера здесь используется записная книжка, содержимое которой хранится в XML-файле. Приведенные в этой главе сценарии позволяют с помощью объектной модели XML DOM просматривать и изменять содержимое записной книжки.
В главе 7 обсуждаются вопросы организации из сценариев диалога с пользователем, начиная от простого использования параметров командной строки и заканчивая созданием полноценного пользовательского интерфейса с помощью HTML-форм. Все рассматриваемые здесь сценарии предназначены для работы с записной книжкой в формате XML.
В главе 8 показано, как из сценариев WSH организовать управление двумя самыми распространенными программами из пакета Microsoft Office: Word и Excel. Приведенные здесь сценарии позволяют организовать вывод информации из записной книжки в документ Word или таблицу Excel.
В главе 9 рассматривается технология ADO, позволяющая работать из сценариев с базами данных различных форматов. Приведены примеры сценариев, с помощью которых можно просматривать и изменять записи в таблице DBF, содержимое которой переносится (также с помощью сценария) из записной книжки в XML-файле.
В главе 10 обсуждается технология Windows Script Components (WSC), с помощью которой можно WSH-сценарии "упаковывать" в СОМ-объекты. Здесь описана объектная схема WSC XML и подробно рассмотрен процесс создания объекта-сценария, предназначенного для архивирования содержимого каталога в файлы с определенным именем.
В главе 11 рассмотрены примеры сценариев, которые позволяют автоматизировать некоторые повседневные задачи администратора компьютерной системы (например, работу "с учетными записями пользователей, создание сценариев входа/выхода или настройку параметров операционной системы на нескольких рабочих станциях в сети). Для этого используются еще две мощные технологии Microsoft, ADSI и WMI, возможности и основные принципы которых также описаны в этой главе.
В приложениях 1–4 приведены справочники по языкам JScript и VBScript, дано описание специальных редакторов и отладчиков для сценариев (в частности, подробно рассмотрен мощный редактор Primalscript), а также указан список ошибок (с пояснениями), которые могут возникать при выполнении сценариев WSH 5.6.
Примеры сценариев, которые приведены в книге, можно набирать вручную или загружать с прилагаемой дискеты. Структура дискеты и инструкции по ее использованию приведены в приложении 5.
Принятые в книге соглашения
При описании операторов, функций и методов объектов мы использовали стандартные соглашения. Названия параметров и аргументов набраны курсивом, необязательные параметры заключены в квадратные скобки [], например:CreateObject(strProgID [,strPrefix])
Если при вызове команды может быть указан только один параметр/аргумент из нескольких возможных, то такие параметры/аргументы разделены знаком |, например:
<?job debug="true|false"?>
Благодарности
Я благодарю всех сотрудников издательства "БХВ-Петербург", в особенности Анатолия Николаевича Адаменко и Петра Анатольевича Науменко за их вклад в редактирование плана и текста книги, а также других людей, помогавших мне во время работы над книгой. Особую признательность я хочу выразить Эдуарду Батаршину и Евгению Шикину за их ценные консультации и предложения. Спасибо моей жене Татьяне и другим родственникам за их терпение и поддержку во всем.Глава 1 Первое знакомство с Windows Script Host
В ранних версиях Windows стандартным средством для автоматизации однотипных повторяющихся задач служили командные (пакетные) файлы и утилиты пакета Resource Kit для соответствующей версии. Однако даже с помощью имеющегося в Windows NT/2000/XP усовершенствованного командного интерпретатора cmd.exe трудно написать какую-либо сложную программу-сценарий (script): отсутствует полноценная интерактивность, нельзя напрямую работать с рабочим столом Windows и системным реестром и т.д. Для исправления этой ситуации компанией Microsoft был разработан сервер сценариев WSH — Windows Script Host, с помощью которого можно выполнять сценарии, написанные, в принципе, на любом языке (при условии, что для этого языка установлен соответствующий модуль (scripting engine), поддерживающий технологию ActiveX Scripting). В качестве стандартных языков поддерживаются Visual Basic Script Edition (VBScript) и JScript. Вообще говоря, принцип работы сценариев, поддерживаемых WSH, состоит в использовании объектов ActiveX, поэтому вначале мы очень кратко опишем возможности самой технологии ActiveX компании Microsoft.Возможности технологии ActiveX
Напомним, что в Windows с самого начала для обеспечения обмена данными между приложениями была разработана технология связывания и внедрения объектов (OLE, Object Linking and Embedding). Вначале технология OLE использовалась для создания составных документов, а затем для решения более общей задачи — предоставления приложениями друг другу собственных функций (служб) и правильного использования этих функций. Технология, позволяющая одному приложению (клиенту автоматизации), вызывать функции другого приложения (сервера автоматизации), была названа OLE Automation. В основе OLE и OLE Automation лежит разработанная Microsoft базовая "компонентная" технология COM (Component Object Model). В общих словах, компонентное программное обеспечение — это способ разработки программ, при котором используются технологии создания программных модулей, подобные технологиям, применяемым для разработки аппаратных средств. Сложные элементные схемы собираются из стандартизированных микросхем, которые имеют четко определенные документированные функции. Разработчик может эффективно пользоваться такими микросхемами, не задумываясь об их внутренней структуре. В программных компонентах, написанных на каком-либо языке программирования, детали реализации используемых алгоритмов также скрыты внутри компонента (объекта), а на поверхности находятся общедоступные интерфейсы, которыми могут пользоваться и другие приложения, написанные на том же или другом языке. В настоящее время, по заявлению Microsoft, термин OLE используется только по историческим причинам. Вместо него Microsoft с 1996 года применяет новый термин — ActiveX, первоначально обозначавший WWW (World Wide Web) компоненты (объекты), созданные на базе технологии СОМ. Технология ActiveX до последнего времени являлась ключевой в продуктах Microsoft. Наиболее полное воплощение она нашла в программах Microsoft Office, Internet Explorer, IIS (Internet Information Service). В эти продукты для управления соответствующими объектами автоматизации были встроены интерпретаторы специальных языков сценариев: VBScript (используется в Microsoft Office, Internet Explorer, IIS) и JScript (используется в Internet Explorer, IIS). Однако непосредственно в операционной системе, вне этих продуктов, выполнять сценарии, написанные на VBScript или JScript, было нельзя. Сервер сценариев WSH является мощным инструментом, предоставляющим единый интерфейс (объектную модель) для специализированных языков (VBScript, JScript, PerlScript, REXX, TCL, Python и т.п.), которые, в свою очередь, позволяют использовать любые внешние объекты ActiveX. С помощью WSH сценарии могут быть выполнены непосредственно в операционной системе Windows, без встраивания в HTML-страницы.Нумерация версий WSH
Скажем несколько слов относительно нумерации версий WSH. Самая первая версия WSH, входившая в качестве стандартного компонента в Windows 98, имела номер 1.0. С другой стороны, эта версия опиралась на языки сценариев JScript и VBScript версии 5.0, которые поддерживались Internet Explorer 5.0, поэтому можно к самой первой версии WSH относиться и как к WSH 5.0. Следующей версии WSH, входившей в поставку Windows 2000, был присвоен номер 2.0; в этой версии использовались языки JScript и VBScript версии 5.1. Наконец, номер последней версии WSH, являющейся неотъемлемой частью Windows ХР, компания Microsoft решила все же привязать к номеру версии языков JScript и VBScript — таким образом появился сервер сценариев WSH 5.6. Отметим также, что даже сама аббревиатура "WSH" сначала расшифровывалась Microsoft как "Windows Scripting Host", а затем было принято название "Windows Script Host".Замечание
Несмотря на то, что WSH 5.6 является стандартной частью Windows ХР, эту версию можно также установить и использовать во всех предыдущих 32-разрядных версиях Windows 95/98/ME/NT/2000. Для этого необходимо скачать инсталляционный файл для WSH 5.6 с сервера Microsoft (http://msdn.microsoft.com/scripting); там же можно найти и документацию по WSH 5.6.
Назначение и основные свойства WSH
WSH предъявляет минимальные требования к объему оперативной памяти и является очень удобным инструментом для автоматизации повседневных задач пользователей и администраторов операционной системы Windows. Используя сценарии WSH, можно непосредственно работать с файловой системой компьютера, а также управлять работой других приложений (серверов автоматизации). При этом возможности сценариев ограничены только средствами, которые предоставляют доступные серверы автоматизации. Перечислим только наиболее очевидные задачи, для автоматизации которых прекрасно подходят сценарии WSH. □ Организация резервного копирования на сетевой сервер файлов с локальной машины, которые отбираются по какому-либо критерию. □ Быстрое изменение конфигурации рабочего стола Windows в зависимости от задач, выполняемых пользователем. □ Автоматический запуск программ Microsoft Office, создание там сложных составных документов, распечатка этих документов и закрытие приложений. □ Управление работой приложений, не являющихся серверами автоматизации, с помощью посылки в эти приложения нажатий клавиш. □ Подключение и отключение сетевых ресурсов (дисков и принтеров). □ Создание сложных сценариев регистрации для пользователей. □ Выполнение задач администрирования локальной сети (например, добавление или удаление пользователей).Создание и запуск простейших сценариев JScript и VBScript
Простейший WSH-сценарий, написанный на языке JScript или VBScript, — это обычный текстовый файл с расширением js или vbs соответственно, создать его можно в любом текстовом редакторе, способном сохранять документы в формате "Только текст".Размер сценария может изменяться от одной до тысяч строк, предельный размер ограничивается лишь максимальным размером файла в соответствующей файловой системе. В качестве первого примера создадим JScript-сценарий, выводящий на экран диалоговое окно с надписью "Привет!" (рис. 1.1). Рис. 1.1. Простое диалоговое окноЗамечание
Специальные мощные программы, позволяющие создавать и отлаживать сценарии, описаны в приложении 3.
Для вывода такого окна достаточно с помощью, например, стандартного Блокнота Windows (notepad.exe) создать файл First.js, содержащий всего одну строку:
WScript.Echo("Привет!");
Тот же самый сценарий на языке VBScript, естественно, отличается синтаксисом и выглядит следующим образом:
WScript.Echo "Привет!"
Несмотря на то, что для работы наших сценариев достаточно всего одной строки, желательно сразу приучить себя к добавлению в начало файла информации о находящемся в нем сценарии: имя файла, используемый язык, краткое описание выполняемых действий. На языке JScript такая информация, оформленная в вице комментариев, может выглядеть следующим образом:
/*******************************************************************/
/* Имя: First.js */
/* Язык: JScript */
/* Описание: ВЫВОД на экран приветствия */
/*******************************************************************/
Рис. 1.2. Сценарий First.js
На языке VBScript то же самое выглядит следующим образом:
'*******************************************************************
' Имя: First.vbs
' Язык: VBScript
' Описание: Вывод на экран приветствия
'*******************************************************************
Для запуска сценариев WSH существует несколько способов.
Запуск сценария из командной строки в консольном режиме
Можно выполнить сценарий из командной строки с помощью консольной версии WSH cscript.exe. Например, чтобы запустить сценарий, записанный в файле C:\Script\First.js, нужно загрузить командное окно и выполнить в нем командуcscript С:\Script\First.js
В результате выполнения этого сценария в командное окно выведется строка "Привет!" (рис. 1.3).
Рис. 1.3. Результат выполнения First.js в консольном режиме (cscript.exe)
Запуск сценария из командной строки в графическом режиме
Сценарий можно выполнить из командной строки с помощью (оконной) графической версии WSH wscript.exe. Для нашего примера в этом случае нужно выполнить командуwscript C:\Script\First.js
Тогда в результате выполнения сценария на экране появится нужное нам диалоговое окно (рис. 1.4).
Таким образом, мы видим, что при запуске сценария в консольном режиме вывод текстовой информации происходит в стандартный выходной поток (на экран), при запуске в графическом режиме — в диалоговое окно.
Рис. 1.4. Результат выполнения First.js в графическом режиме (wscript.exe)
Запуск сценария с помощью меню Пуск
Для запуска сценария с помощью пункта Выполнить (Run) меню Пуск (Start), достаточно написать полное имя этого сценария в поле Открыть (Open) (рис. 1.5). Рис. 1.5. Запуск сценария из меню Пуск в Windows ХРВ этом случае по умолчанию сценарий будет выполнен с помощью wscript.exe, т.е. вывод информации будет вестись в графическое диалоговое окно.
Запуск сценария с помощью Проводника Windows (Windows Explorer)
Самым простым является запуск сценария в окнах Проводника Windows или на рабочем столе — достаточно просто выполнить двойной щелчок мышью на имени файла со сценарием или на его значке (рис. 1.6). Рис. 1.6. Запуск сценария с помощью Проводника WindowsПри этом, как и в случае запуска с помощью меню Пуск (Start), сценарий по умолчанию выполняется с помощью wscript.exe.
Установка и изменение свойств сценариев
В случае необходимости для сценариев можно задавать различные параметры, влияющие на ход их выполнения. Для консольной (cscript.exe) и графической (wscript.exe) версий сервера сценариев эти параметры задаются по-разному.Свойства и параметры сценариев, выполняемых с помощью cscript.exe
В этом случае исполнение сценария контролируется с помощью параметров командной строки для cscript.exe (табл. 1.1), которые включают или отключают различные опции WSH (все эти параметры начинаются с символов //).Таблица 1.1. Параметры командной строки cscript.exe
Параметр | Описание |
---|---|
//I |
Выключает пакетный режим (по умолчанию). При этом на экран будут выводиться все сообщения об ошибках в сценарии |
//B |
Включает пакетный режим. При этом на экран не будут выводиться никакие сообщения |
//Т:nn |
Задает тайм-аут в секундах, т.е. сценарий будет выполняться nn секунд, после чего процесс прервется. По умолчанию время выполнения не ограничено |
//Logo |
Выводит (по умолчанию) перед выполнением сценария информацию о версии и разработчике WSH |
//Nologo |
Подавляет вывод информации о версии и разработчике WSH |
//H:CScript или //H:Wscript |
Делает cscript.ехе или wscript.exe приложением для запуска сценариев по умолчанию. Если эти параметры не указаны, то по умолчанию подразумевается wscript.exe |
//S |
Сохраняет установки командной строки для текущего пользователя |
//? |
Выводит встроенную подсказку для параметров командной строки |
//E:engine |
Выполняет сценарий с помощью модуля, заданного параметром engine |
//D |
Включает отладчик |
//X |
Выполняет программу в отладчике |
//Job:<JobID> |
Запускает задание с индексом JobID из многозадачного WS-файла (структура WS-файлов будет описана в главе 3) |
//U |
Позволяет использовать при перенаправлении ввода/вывода с консоли кодировку Unicode |
Например, команда
cscript //Nologo C:\Script\First.js
запустит сценарий First.js без информации о версии WSH (рис. 1.7).
Сценарий можно запускать с параметрами командной строки, которые указываются после имени этого сценария (процедура обработки таких параметров будет описана ниже, при рассмотрении объектов WshArguments
, WshNamed
и WshUnnamed
). Например, команда
cscript //В C:\Script\First.js /а /b
запустит сценарий First.js в пакетном режиме, при этом /а
и /b
будут являться параметрами этого сценария, а //B
— параметром приложения cscript.exe.
Рис. 1.7. Результат выполнения First.js в консольном режиме без информации о версии WSH
Свойства и параметры сценариев, выполняемых с помощью wscript.exe
При использовании для запуска модуля wscript.exe свойства сценария можно устанавливать с помощью вкладки Сценарий (Script) диалогового окна, задающего свойства файла в Windows (рис. 1.8). После задания свойств сценария автоматически создается файл с именем этого сценария и расширением wsh, который имеет структуру наподобие ini-файла, например:[ScriptFile]
Path=C:\Script\First.js
[Options]
Timeout=0
DisplayLogo=1
Если дважды щелкнуть в Проводнике Windows по wsh-файлу или запустить такой файл из командной строки, то соответствующий сервер сценариев (wscript.exe или cscript.exe) запустит сценарий, которому соответствует wsh- файл, с заданными в секции Options параметрами.
Рис. 1.8. Установка свойств сценария First.jsЗамечание
Если wsh-фaйл не запускается, нужно проверить наличие на диске файла, указанного в секции ScriptFile.
При запуске сценариев с помощью wscript.exe для задания параметров командной строки сценария можно использовать технологию drag-and-drop — если выделить в Проводнике Windows несколько файлов и перетащить их на ярлык сценария, то этот сценарий запустится, а имена выделенных файлов передадутся ему в качестве параметров.
Стандартные объекты WSH5.6
Перейдем теперь к описанию собственной объектной модели WSH 5.6. С помощью внутренних объектов этой версии WSH из сценариев можно выполнять следующие основные задачи: □ выводить информацию в стандартный выходной поток (на экран) или в диалоговое окно Windows; □ читать данные из стандартного входного потока (т. е. вводить данные с клавиатуры) или использовать информацию, выводимую другой командой; □ использовать свойства и методы внешних объектов, а также обрабатывать события, которые генерируются этими объектами; □ запускать новые независимые процессы или активизировать уже имеющиеся; □ запускать дочерние процессы с возможностью контроля их состояния и доступа к их стандартным входным и выходным потокам; □ работать с локальной сетью: определять имя зарегистрировавшегося пользователя, подключать сетевые диски и принтеры; □ просматривать и изменять переменные среды; □ получать доступ к специальным папкам Windows; □ создавать ярлыки Windows; □ работать с системным реестром. В WSH 5.6 входят перечисленные ниже объекты: □WScript
. Это главный объект WSH, который служит для создания других объектов или связи с ними, содержит сведения о сервере сценариев, а также позволяет вводить данные с клавиатуры и выводить информацию на экран или в окно Windows.
□ WshArguments
. Обеспечивает доступ ко всем параметрам командной строки запущенного сценария или ярлыка Windows.
□ WshNamed
. Обеспечивает доступ к именным параметрам командной строки запущенного сценария.
□ WshUnnamed
. Обеспечивает доступ к безымянным параметрам командной строки запущенного сценария.
□ WshShell
. Позволяет запускать независимые процессы, создавать ярлыки, работать с переменными среды, системным реестром и специальными папками Windows.
□ WshSpecialFolders
. Обеспечивает доступ к специальным папкам Windows.
□ WshShortcut
. Позволяет работать с ярлыками Windows.
□ WshUrlShortcut
. Предназначен для работы с ярлыками сетевых ресурсов.
□ WshEnvironment
. Предназначен для просмотра, изменения и удаления переменных среды.
□ WshNetwork
. Используется при работе с локальной сетью: содержит сетевую информацию для локального компьютера, позволяет подключать сетевые диски и принтеры.
□ WshScriptExec
. Позволяет запускать консольные приложения в качестве дочерних процессов, обеспечивает контроль состояния этих приложений и доступ к их стандартным входным и выходным потокам.
□ WshController
. Позволяет запускать сценарии на удаленных машинах.
□ WshRemote
. Позволяет управлять сценарием, запущенным на удаленной машине.
□ WshRemoteError
. Используется для получения информации об ошибке, возникшей в результате выполнения сценария, запущенного на удаленной машине.
Кроме этого, имеется объект FileSystemObject, обеспечивающий доступ к файловой системе компьютера (этот объект будет подробно описан в главе 5).
Перейдем теперь к рассмотрению свойств и методов внутренних объектов WSH.
Замечание
Примеры всех сценариев, приведенных далее в этой главе, написаны на JScript. Так как эти сценарии только иллюстрируют свойства и методы WSH и не используют особенностей, характерных только для JScript, перевод их на VBScript не представляет никакого труда.
Объект WScript
Свойства объектаWScript
позволяют получить полный путь к использующемуся серверу сценариев (wscript.exe или cscript.exe), параметры командной строки, с которыми запущен сценарий, режим его работы (интерактивный или пакетный). Кроме этого, с помощью свойств объекта WScript
можно выводить информацию в стандартный выходной поток и читать данные из стандартного входного потока. Также WScript
предоставляет методы для работы внутри сценария с объектами автоматизации и вывода информации на экран (в текстовом режиме) или в окно Windows.
Отметим, что в сценарии WSH объект WScript
можно использовать сразу, без какого-либо предварительного описания или создания, т. к. его экземпляр создается сервером сценариев автоматически. Для использования же всех остальных объектов нужно применять либо метод CreateObject
, либо определенное свойство другого объекта.
Свойства объекта WScript
представлены в табл. 1.2.
Таблица 1.2. Свойства объекта
WScript
Свойство | Описание |
---|---|
Application |
Предоставляет интерфейс IDispatch для объекта WScript |
Arguments |
Содержит указатель на коллекцию WshArguments , в которой находятся параметры командной строки для исполняемого сценария |
FullName |
Содержит полный путь к исполняемому файлу сервера сценариев (в Windows ХР обычно это C:\WINDOWS\SYSTEM32\CSCRIPT.EXE или C:\WINDOWS\SYSTEM32\WSCRIPT.EXE) |
Name |
Содержит название объекта Wscript (Windows Script Host) |
Path |
Содержит путь к каталогу, в котором находится cscript.exe или wscript.exe (в Windows ХР обычно это C:\WINDOWS\SYSTEM32) |
ScriptFullName |
Содержит полный путь к запущенному сценарию |
ScriptName |
Содержит имя запущенного сценария |
StdErr |
Позволяет запущенному сценарию записывать сообщения в стандартный поток для ошибок |
StdIn |
Позволяет запущенному сценарию читать информацию из стандартного входного потока |
StdOut |
Позволяет запущенному сценарию записывать информацию в стандартный выходной поток |
Version |
Содержит версию WSH |
Опишем более подробно те свойства объекта WScript, которые требуют дополнительных пояснений.
Свойство Arguments
В следующем примере (листинг 1.1) с помощью цикла for на экран выводятся все параметры командной строки, с которыми был запущен сценарий.Листинг 1.1. Вывод на экран всех параметров сценария
/*******************************************************************/
/* Имя: ShowArgs.js */
/* Язык: JScript */
/* Описание: Вывод на экран параметров запущенного сценария */
/*******************************************************************/
var i, objArgs;
objArgs = WScript.Arguments; //Создаем объект WshArguments
for (i=0; i<=objArgs.Count()-1; i++)
WScript.Echo(objArgs(i)); //Выводим на экран i-й аргумент
/************* Конец *********************************************/
Другие примеры работы с аргументами командной строки приведены в листингах 1.4, 1.5, 2.22 и 2.23.
Свойства StdErr, StdIn, StdOut
Доступ к стандартным входным и выходным потокам с помощью свойствStdIn
, StdOut
и StdErr
можно получить только в том случае, если сценарий запускался в консольном режиме с помощью cscript.exe. Если сценарий был запущен с помощью wscript.exe, то при попытке обратиться к этим свойствам возникнет ошибка "Invalid Handle
" (рис. 1.9).
Рис. 1.9. Ошибка при обращении к StdIn
в графическом режиме
Работать с потоками
StdOut
и StdErr
можно с помощью методов Write
, WriteLine
, WriteBlankLines
, а с потоком StdIn
— с помощью методов Read
, ReadLine
, ReadAll
, Skip
, SkipLine
. Эти методы кратко описаны в табл. 1.3.
Таблица 1.3. Методы для работы с потоками
Метод | Описание |
---|---|
Read(n) |
Считывает из потока StdIn заданное параметром n число символов и возвращает полученную строку |
ReadAll() |
Читает символы из потока StdIn до тех пор, пока не встретится символ конца файла ASCII 26 (<Ctrl>+<Z>), и возвращает полученную строку |
ReadLine() |
Возвращает строку, считанную из потока StdIn |
Skip(n) |
Пропускает при чтении из потока StdIn заданное параметром n число символов |
SkipLine() |
Пропускает целую строку при чтении из потока StdIn |
Write(string) |
Записывает в поток StdOut или StdErr строку string (без символа конца строки) |
WriteBlankLines(n) |
Записывает в поток StdOut или StdErr заданное параметром n число пустых строк |
WriteLine(string) |
Записывает в поток StdOut или StdErr строку string (вместе с символом конца строки) |
Напомним, что операционная система Windows поддерживает механизм конвейеризации (символ "|" в командной строке). Этот механизм делает возможным передачу данных от одной программы к другой. Таким образом, используя стандартные входные и выходные потоки, можно из сценария обрабатывать строки вывода другого приложения или перенаправлять выводимые сценарием данные на вход программ-фильтров (
FIND
или SORT
). Например, следующая команда будет сортировать строки вывода сценария example.js и выводить их в файл sort.txt:
cscript //Nologo example.js | sort > sort.txt
Опция //Nologo здесь нужна для того, чтобы в файл sort.txt не попадали строки с информацией о разработчике и номере версии WSH.
Кроме этого, с помощью методов, работающих с входным потоком StdIn, можно организовывать диалог с пользователем, т. е. создавать интерактивные сценарии. Пример такого сценария представлен в листинге 1.2.
Листинг 1.2. Пример интерактивного сценария
/*******************************************************************/
/* Имя: Interact.js */
/* Язык: JScript */
/* Описание: Ввод/вывод строк в консольном режиме */
/*******************************************************************/
var s;
//Выводим строку на экран
WScript.StdOut.Write("Введите число: ");
//Считываем строку
s = WScript.StdIn.ReadLine();
//Выводим строку на экран
WScript.StdOut.WriteLine("Вы ввели число " + s);
/************* Конец *********************************************/
Объект WScript
имеет несколько методов, которые описаны в табл. 1.4.
Таблица 1.4. Методы объекта
WScript
Метод | Описание |
---|---|
CreateObject(strProgID [, strPrefix]) |
Создает объект, заданный параметром strProgID |
ConnectObject(strObject, strPrefix) |
Устанавливает соединение с объектом strObject , позволяющее писать функции-обработчики его событий (имена этих функций должны начинаться с префикса strPrefix ) |
DisconnectObject(obj) |
Отсоединяет объект obj , связь с которым была предварительно установлена в сценарии |
Echo([Arg1] [, Arg2] [,…]) |
Выводит текстовую информацию на консоль или в диалоговое окно |
GetObject(strPathname [, strProgID], [strPrefix]) |
Активизирует объект автоматизации, определяемый заданным файлом (параметр strPathName ), или объект, заданный параметром strProgID |
Quit([intErrorCode]) |
Прерывает выполнение сценария с заданным параметром intErrorCode кодом выхода. Если параметр intErrorCode не задан, то объект WScript установит код выхода равным нулю |
Sleep(intTime) |
Приостанавливает выполнения сценария (переводит его в неактивное состояние) на заданное параметром intTime число миллисекунд |
Приведем дополнительные пояснения и примеры использования для методов, приведенных в табл. 1.4.
Метод CreateObject
Строковый параметрstrProgID
, указываемый в методе CreateObject
, называется программным идентификатором объекта (Programmic Identifier, ProgID).
Если указан необязательный параметр strPrefix
, то после создания объекта в сценарии можно обрабатывать события, возникающие в этом объекте (естественно, если объект предоставляет интерфейсы для связи с этими событиями). Когда объект сообщает о возникновении определенного события, сервер сценариев вызывает функцию, имя которой состоит из префикса strPrefix
и имени этого события. Например, если в качестве strPrefix
указано "MYOBJ_
", а объект сообщает о возникновении события "OnBegin
", то будет запущена функция "MYOBJ_OnBegin
", которая должна быть описана в сценарии.
В следующем примере метод CreateObject
используется для создания объекта WshNetwork
:
var WshNetwork = WScript.Createobject("WScript.Network");
Отметим, что объекты автоматизации из сценариев можно создавать и без помощи WSH. В JScript для этого используется объект ActiveXObject
, например:
var WshNetwork = new ActiveXObject("WScript.Network");
В VBscript для создания объектов может использоваться специальная функция CreateObject
, например:
Set WshNetwork = CreateObject("WScript.Network")
Однако организовать в сценарии обработку событий создаваемого объекта можно только при использовании метода WScript.CreateObject
.
Метод ConnectObject
Объект, соединение с которым осуществляется с помощью методаConnectObject
, должен предоставлять интерфейс к своим событиям.
В следующем примере в переменной MyObject
создается абстрактный объект "SomeObject
", затем из сценария вызывается метод SomeMetod
этого объекта. После этого устанавливается связь с переменной MyObject
и задается префикс "MyEvent
" для процедур обработки события этого объекта. Если в объекте возникнет событие с именем "Event
", то будет вызвана функция MyEvent_Event
. Метод DisconnectObject
объекта WScript
производит отсоединение объекта MyObject
.
var MyObject = WScript.CreateObject("SomeObject");
MyObject.SomeMethod();
WScript.ConnectObject(MyObject, "MyEvent");
function MyEvent_Event(strName) {
WScript.Echo(strName);
}
WScript.DisconnectObject(MyObject);
Метод DisconnectObject
Если соединения с объектомobj
не было установлено, то метод DisconnectObject(obj)
не будет производить никаких действий. Пример применения DisconnectObject
был приведен выше.
Метод Echo
ПараметрыArg1
, Arg2
задают аргументы для вывода. Если сценарий был запущен с помощью wscript.exe, то метод Echo
направляет вывод в диалоговое окно, если же для выполнения сценария применяется cscript.exe, то вывод будет направлен на экран (консоль). Каждый из аргументов при выводе будет разделен пробелом. В случае использования cscript.exe вывод всех аргументов будет завершен символом новой строки. Если в методе Echo не задан ни один аргумент, то будет напечатана пустая строка.
Например, после выполнения сценария EchoExample.js (листинг 1.3) с помощью cscript.exe на экран будут выведены пустая строка, три числа и строка текста (рис. 1.10).
Листинг 1.3. Сценарий EchoExample.js
/*******************************************************************/
/* Имя: EchoExample.js */
/* Язык: JScript */
/* Описание: Использование метода WScript.Echo */
/*******************************************************************/
WScript.Echo(); //Выводим пустую строку
WScript.Echo(1,2,3); //Выводим числа
WScript.Echo("Привет!"); //Выводим строку
/************* Конец *********************************************/
Рис. 1.10. Вывод информации с помощью метода Echo
Другие примеры использования метода
Echo
приведены в главе 2 (см. листинги 2.1, 2.2, 2.4 и 2.5).
Метод Sleep
В следующем примере сценарий переводится в неактивное состояние на 5 секунд:WScript.Echo("Сценарий запущен, отдыхаем...");
WScript.Sleep(5000);
WScript.Echo("Выполнение завершено");
Метод Sleep
необходимо применять при асинхронной работе сценария и какой-либо другой задачи, например, при имитации нажатий клавиш в активном окне с помощью метода WshShell.SendKeys
(см. листинги 1.13, 2.31, 2.32).
Объекты-коллекции
В WSH входят объекты, с помощью которых можно получить доступ к коллекциям, содержащим следующие элементы: □ параметры командной строки запущенного сценария или ярлыка Windows (объектыWshArguments
, WshNamed
и WshUnnamed
);
□ значения переменных среды (объект WshEnvironment
);
□ пути к специальным папкам Windows (объект WshSpecialFolders
).
Объект WshArguments
ОбъектWshArguments
содержит коллекцию всех параметров командной строки запущенного сценария или ярлыка Windows. Этот объект можно создать только с помощью свойства Arguments
объектов WScript
и WshShortcut
.
В принципе, работать с элементами коллекции WshArguments
можно стандартным для JScript образом — создать объект Enumerator
и использовать его методы moveNext
, item
и atEnd
. Например, вывести на экран все параметры командной строки, с которыми запущен сценарий, можно следующим образом (листинг 1.4).
Листинг 1.4. Вывод всех параметров сценария (стандартные коллекции JScript)
/********************************************************************/
/* Имя: EnumArgs.js */
/* Язык: JScript */
/* Описание: Вывод на экран параметров запущенного сценария */
/********************************************************************/
var objArgs, e, x;
objArgs = WScript.Arguments; //Создаем объект WshArguments
//Создаем объект Enumerator для коллекции objArgs
e = new Enumerator(objArgs);
for (;!e.atEnd();e.moveNext()) {
x = e.item(); //Получаем значение элемента коллекции
WScript.Echo(x); //Выводим значение параметра на экран
}
/************* Конец *********************************************/
Однако намного удобнее использовать методы Count
и Item
самого объекта WshArguments
(метод Item
имеется у всех коллекций WSH). Метод Count
возвращает число элементов в коллекции, т. е. количество аргументов командной строки, а метод Item(n)
— значение n-го элемента коллекции (нумерация начинается с нуля). Более того, чтобы получить значение отдельного элемента коллекции WshArguments
, можно просто указать его индекс в круглых скобках после имени объекта.
Таким образом, предыдущий пример можно переписать более компактным образом (листинг 1.5).Замечание
Число элементов в коллекции хранится и в свойствеLength
объектаWshArguments
.
Листинг 1.5. Вывод всех параметров сценария (методы WSH)
/*******************************************************************/
/* Имя: ShowArgs.js */
/* Язык: JScript */
/* Описание: Вывод на экран параметров запущенного сценария */
/*******************************************************************/
var i, objArgs;
objArgs = WScript.Arguments; //Создаем объект WshArguments
for (i=0; i<=objArgs.Count()-1; i++)
WScript.Echo(objArgs(i)); //Выводим на экран i-й аргумент
/************* Конец *********************************************/
С помощью объекта WshArguments
можно также выделять и отдельно обрабатывать аргументы сценария, у которых имеются имена (например, /Name:Andrey
) и безымянные аргументы. Ясно, что использование именных параметров более удобно, т. к. в этом случае нет необходимости запоминать, в каком порядке должны быть записаны параметры при запуске того или иного сценария.
Для доступа к именным и безымянным аргументам используются соответственно два специальных свойства объекта WshArguments
: Named
и Unnamed
.
Свойство Named
содержит ссылку на коллекцию WshNamed
, свойство Unnamed
— на коллекцию WshUnnamed
.
Таким образом, обрабатывать параметры командной строки запущенного сценария можно тремя способами:
□ просматривать полный набор всех параметров (как именных, так и безымянных) с помощью коллекции WshArguments
;
□ выделить только те параметры, у которых есть имена (именные параметры) с помощью коллекции WshNamed
;
□ выделить только те параметры, у которых нет имен (безымянные параметры) с помощью коллекции WshUnnamed
.
У объекта WshArguments
имеется еще один метод ShowUsage
. Этот метод служит для вывода на экран информации о запущенном сценарии (описание аргументов командной строки, пример запуска сценария и т.д.). В свою очередь, подобную информацию можно задать только при использовании WSH-сценариев с разметкой XML; более подробно о применении метода ShowUsage
идет речь в главе 3 при рассмотрении элементов <runtime>
, <description>
, <example>
, <named>
и <unnamed>
.
Объект WshNamed
ОбъектWshNamed
содержит коллекцию параметров командной строки запущенного сценария, у которых имеется уникальное имя (именные параметры). В WSH 5.6 именной параметр всегда начинается с символа "/", после чего приводится имя этого параметра, затем ставится двоеточие ":" и пишется значение параметра, например:
/Name:Andrey
В качестве значения именного параметра рассматривается набор символов, начинающихся после двоеточия и заканчивающихся перед первым встретившимся пробелом. Для того чтобы значением параметра командной строки была строка, состоящая из нескольких слов, необходимо заключить эту строку в кавычки. Например:
/Name:"Andrey Popov"
Создается объект WshNamed с помощью свойства Named
коллекции WshArguments
. Для того чтобы получить значение определенного аргумента, его имя используется в качестве индекса коллекции.
Например, пусть сценарий MyScript.js запущен с двумя именными параметрами:Замечание
Узнать число именных параметров можно только с помощью свойстваLength
коллекцииWshNamed
; методаCount
у этой коллекции нет.
MyScript.js /User:Andrey /Computer:Server1
Тогда вывести на экран значение параметров Name и Computer можно двумя способами:
var objNamedArgs;
objNamedArgs=WScript.Arguments.Named;
WScript.Echo("Имя пользователя: "+objNamedArgs.Item("User"));
WScript.Echo("Имя компьютера: "+objNamedArgs.Item ("Computer"));
или просто
var objNamedArgs;
objNamedArgs=WScript.Arguments.Named;
WScript.Echo("Имя пользователя: "+objNamedArgs("User"));
WScript.Echo("Имя компьютера: "+objNamedArgs("Computer"));
Отметим также, что значением именного параметра, как и безымянного, может служить целая строка, состоящая из нескольких литералов и заключенная в кавычки, например:
MyScript.js /User:"Andrey Popov" /Computer:Server1
Тогда в результате выполнения в сценарии MyScript.js следующей строки:
WScript.Echo("Имя пользователя: "+ WScript.Arguments.Named("User"));
на экран будет выведено
Имя пользователя: Andrey Popov
Для того чтобы узнать, был ли указан при запуске сценария тот или иной именной параметр, используется метод Exists
объекта WshNamed
. Например,
if (WScript.Arguments.Named.Exists("User"))
WScript.Echo("Имя пользователя: "+ WScript.Arguments.Named("User"));
Примеры, иллюстрирующие использование объекта WshNamed, приведены также в главе 2 (см. листинги 2.22 и 2.23).
Объект WshUnnamed
В коллекцииWshUnnamed
содержатся параметры командной строки запущенного сценария, у которых нет имени (безымянные параметры). Создается этот объект с помощью свойства Unnamed
коллекции WshArguments
. Для того чтобы получить значение определенного аргумента, его номер используется в качестве индекса коллекции (нумерация начинается с нуля).
Например, сценарий MyScript.js запущен с двумя безымянными параметрами:Замечание
Узнать число безымянных параметров можно только с помощью свойстваLength
коллекцииWshUnnamed
; методаCount
у этой коллекции нет.
MyScript.js "Andrey Popov" Server1
Тогда после выполнения в сценарии MyScript.js любого из следующих двух блоков:
var objUnnamedArgs;
obUnnamedArgs=WScript.Arguments.Unnamed;
WScript.Echo("Имя пользователя: "+objUnnamedArgs.Item(0));
WScript.Echo("Имя компьютера: "+objUnnamedArgs.Item(1));
или
var objUnnamedArgs;
obUnnamedArgs=WScript.Arguments.Unnamed;
WScript.Echo("Имя пользователя: "+objUnnamedArgs(0));
WScript.Echo("Имя компьютера: "+objUnnamedArgs(1));
на экран выведутся следующие строки:
Имя пользователя: Andrey Popov
Имя компьютера: Server1
Примеры, иллюстрирующие использование объекта WshUnnamed
, приведены также в главе 2 (см. листинги 2.22 и 2.23).
Объект WshEnvironment
ОбъектWshEnvironment
позволяет получить доступ к коллекции, содержащей переменные среды заданного типа (переменные среды операционной системы, переменные среды пользователя или переменные среды текущего командного окна). Этот объект можно создать с помощью свойства Environment
объекта WshShell
или одноименного его метода:
var WshShell=WScript.Createobject("WScript.Shell"),
WshSysEnv=WshShell.Environment,
WshUserEnv=WshShell.Environment("User");
Объект WshEnvironment
имеет свойство Length
, в котором хранится число элементов в коллекции (количество переменных среды), и методы Count
и Item
. Для того чтобы получить значение определенной переменной среды, в качестве аргумента метода Item
указывается имя этой переменной в двойных кавычках. В следующем примере мы выводим на экран значение переменной среды PATH
:
var WshShell=WScript.CreateObject("WScript.Shell"), WshSysEnv=WshShell.Environment;
WScript.Echo("Системный путь:", WshSysEnv.Item("PATH"));
Можно также просто указать имя переменной в круглых скобках после имени объекта:
WScript.Echo("Системный путь:",WshSysEnv("PATH");
Кроме этого, у объекта WshEnvironment имеется метод Remove(strName), который удаляет заданную переменную среды. Например, в листинге 1.6 приведен сценарий, который удаляет две переменные (EXAMPLE_1
и EXAMPLE_2
) из окружения среды пользователя.
Замечание
Если в окружении среды пользователя нет переменных с именамиEXAMPLE_1
иEXAMPLE_2
, то при вызове методаRemove
произойдет ошибка.
Листинг 1.6. Удаление переменных среды
/*******************************************************************/
/* Имя: RemEnv.js */
/* Язык: JScript */
/* Описание: Удаление двух переменных среды */
/*******************************************************************/
//Создаем объект WshShell
var WshShell = WScript.CreateObject("WScript.Shell");
//Создаем объект WshEnvironment
var WshUsrEnv = WshShell.Environment("User");
//Удаляем переменные среды
WshUsrEnv.Remove("EXAMPLE_1");
WshUsrEnv.Remove("EXAMPLE_2");
/************* Конец *********************************************/
Объект WshSpecialFolders
ОбъектWshSpecialFolders
обеспечивает доступ к коллекции, содержащей пути к специальным папкам Windows (например, к рабочему столу или к меню Пуск (Start)); задание путей к таким папкам может быть необходимо, например, для создания непосредственно из сценария ярлыков на рабочем столе.
В Windows 9х поддерживаются следующие имена специальных папок:
□ Desktop;
□ Favorites;
□ Fonts;
□ MyDocuments;
□ NetHood;
□ PrintHood;
□ Programs;
□ Recent;
□ SendTo;
□ StartMenu;
□ Startup;
□ Templates.
В Windows NT/2000/XP дополнительно можно получить доступ еще к четырем папкам, которые хранят данные для всех пользователей:
□ AllUsersDesktop;
□ AllUsersStartMenu;
□ AllUsersPrograms;
□ AllUsersStartup.
Объект WshSpecialFolders
создается c помощью свойства SpecialFolders
объекта WshShell
:
var WshShell=WScript.CreateObject("WScript.Shell"),
WshSpecFold=WshShell.SpecialFolders;
Как и почти все коллекции WSH, объект WshSpecialFolders
имеет свойство Length
и методы Count
и Item
. Доступ к отдельному элементу производится либо через имя соответствующей папки, либо через числовой индекс (Листинг 1.7).
Листинг 1.7. Обработка коллекции WshSpecialFolders
/*******************************************************************/
/* Имя: ShowSpecFold.js */
/* Язык: JScript */
/* Описание: Вывод на экран названий специальных папок Windows */
/* (коллекция WshSpecialFolders) */
/*******************************************************************/
var WshShell, WshFldrs, i;
//Создаем объект WshShell
WshShell = WScript.CreateObject("Wscript.Shell");
//Создаем объект WshSpecialFolders
WshFldrs = WshShell.SpecialFolders;
WScript.Echo("Некоторые специальные папки...");
//Выводим путь к папке Desktop
WScript.Echo("Desktop="+ WshFldrs.item("Desktop"));
//Выводим путь к папке Favorities
WScript.Echo("Favorites="+ WshFldrs("Favorites"));
//Выводим путь к папке Programs
WScript.Echo("Programs="+ WshFldrs("Programs"));
WScript.Echo("");
WScript.Echo("Список всех специальных папок...");
for (i=0;i<= WshFldrs.Count()-1;i++){
//Выводим на экран i-й элемент коллекции WshFldrs
WScript.Echo(WshFldrs(i));
}
/************* Конец *********************************************/
Другие примеры работы со специальными папками Windows приведены в главе 2 (см. листинги 2.39–2.42).
Работа с сетью и оболочкой Windows
Для работы с локальной сетью и оболочкой Windows (специальные папки, переменные среды, системный реестр) предназначены соответственно объектыWshNetwork
и WshShell
.
Объект WshNetwork
ОбъектWshNetwork
предназначен для работы с ресурсами локальной сети; с помощью методов этого объекта можно подключать и отключать сетевые диски и принтеры.
Объект WshNetwork
создается следующим образом:
var objNet=WScript.CreateObject("WScript.Network");
Свойства данного объекта приведены в табл. 1.5.
Таблица 1.5. Свойства объекта
WshNetwork
Свойство | Описание |
---|---|
ComputerName |
Содержит имя компьютера, на котором запущен сценарий |
UserDomain |
Содержит имя домена, в котором зарегистрировался пользователь |
UserName |
Содержит имя пользователя |
Листинг 1.8. Пример использования объекта WshNetwork
/*******************************************************************/
/* Имя: ShowNetwork.js */
/* Язык: JScript */
/* Описание: Вывод на экран сетевого имени компьютера и имени */
/* пользователя */
/*******************************************************************/
var objNet;
//Создаем объект WshNetwork
objNet = WScript.CreateObject("WScript.Network");
//Выводим на экран свойства ComputerName и UserName
WScript.Echo("Имя машины:",objNet.ComputerName);
WScript.Echo("Имя пользователя:",objNet.UserName);
/************* Конец *********************************************/
Методы объекта
WshNetwork
описаны в табл. 1.6.
Таблица 1.6. Методы объекта
WshNetwork
Метод | Описание |
---|---|
AddPrinterConnection(strLocalName, strRemoteName [ ,bUpdateProfile] [,strUser] [,strPassword]) |
Подключает локальный порт компьютера к сетевому принтеру |
Для Windows NT/2000/XP: AddWindowsPrinterConnection(strPrnPath) Для Windows 9x: AddWindowsPrinterConnection(strPrnPath, strDriverName[, strPort]) |
Регистрирует принтер в Windows и подключает его к сетевому ресурсу. В отличие от AddPrinterConnection , этот метод позволяет создать связь с сетевым принтером без явного перенаправления вывода в локальный порт |
EnumNetworkDrives() |
Возвращает коллекцию, в которой хранятся буквы и сетевые пути ко всем подключенным сетевым дискам |
EnumPrinterConnections() |
Возвращает коллекцию, в которой хранятся данные обо всех подключенных сетевых принтерах |
MapNetworkDrive(strLocalName, strRemoteName, [bUpdateProfile], [strUser], [strPassword]) |
Подключает сетевой ресурс strRemoteName под локальным именем диска strLocalName |
RemoveNetworkDrive(strName, [bForce], [bUpdateProfile]) |
Отключает подключенный сетевой диск |
RemovePrinterConnection(strName, [bForce], [bUpdateProfile]) |
Отключает подключенный сетевой принтер |
SetDefaultPrinter(strPrinterName) |
Делает заданный сетевой принтер принтером по умолчанию |
Опишем методы из табл. 1.6 более подробно.
Метод AddPrinterConnection
Если необязательный параметрbUpdateProfile
равен True
, то создаваемое сетевое подключение будет сохранено в профиле пользователя.
Параметры strUser
(имя пользователя) и strPassword
(пароль) нужны в том случае, когда вы подключаете сетевой принтер от имени пользователя, которое отличается от имени текущего пользователя, зарегистрированного в системе.
В следующем примере метод AddPrinterConnection
применяется для подключения принтера с сетевым именем \\Server1\Epson
к локальному порту LPT1
:
var WshNetwork = CreateObject("WScript.Network");
WshNetwork.AddPrinterConnection("LPT1", "\\Server1\Epson");
Метод AddWindowsPrinterConnection
ПараметрstrDriverName
указывает имя драйвера, необходимого для подключаемого принтера. Если принтер подключается в операционной системе Windows 9х, то нужный драйвер уже должен быть установлен на этой машине, иначе возникнет ошибка подключения. В Windows NT/2000/XP параметр strDriverName
игнорируется.
Параметр strPort
задает в явном виде порт, вывод в который будет перенаправлен на сетевой ресурс (по умолчанию это порт LPT1
). В Windows NT/2000/XP параметр strPort
игнорируется.
В следующем примере метод AddWindowsPrinterConnection
применяется для подключения сетевого принтера к локальному порту LPT1
(по умолчанию):
var WshNetwork=CreateObject("WScript.Network");
PrinterPath="\\printserv\DefaultPrinter";
PrinterDriver="Lexmark Optra S 1650";
WshNetwork.AddwindowsPrinterConnection(PrinterPath, PrinterDriver);
Метод EnumNetworkDrives
Элементами возвращаемой коллекции являются буквы, обозначающие имеющиеся сетевые диски и сетевые имена ресурсов, к которым эти диски подключены. Первым элементом коллекции является буква, вторым — сетевое имя; эта последовательность сохраняется для всех сетевых дисков в коллекции. В следующем примере на экран выводятся буквы, обозначающие все сетевые диски и имена ресурсов, к которым они подключены (листинг 1.9).Листинг 1.9. Пример использования метода EnumNetworkDrives
/*******************************************************************/
/* Имя: ShowNetDrives.js */
/* Язык: JScript */
/* Описание: Вывод на экран букв сетевых дисков и имен */
/* соответствующих ресурсов */
/*******************************************************************/
var WshNetwork,oDrives,i;
//Создаем объект WshNetwork
WshNetwork = WScript.CreateObject("WScript.Network");
//Создаем коллекцию с информацией о сетевых дисках
oDrives = WshNetwork.EnumNetworkDrives();
for (i=0; i<=oDrives.Count()-1; i++)
WScript.Echo(oDrives.Item(i)); //Вывод i-го элемента коллекции
/************* Конец *********************************************/
Метод EnumPrinterConnections
Элементами возвращаемой коллекции являются названия локальных портов и сетевые имена принтеров, связанных с этими портами. Сама коллекция организована так же, как и коллекция, возвращаемая методомEnumNetworkDrives
.
В следующем примере на экран выводятся названия всех переназначенных портов и имена сетевых ресурсов, с которыми они связаны (листинг 1.10).
Листинг 1.10. Пример использования метода EnumPrinterConnections
/*******************************************************************/
/* Имя: ShowNetPrn.js */
/* Язык: JScript */
/* Описание: Вывод на экран переназначенных портов и имен */
/* соответствующих ресурсов */
/*******************************************************************/
//Создаем объект WshNetwork
var WshNetwork = WScript.CreateObject("WScript.Network");
//Создаем коллекцию с информацией о подключенных принтерах
var oPrinters = WshNetwork.EnumPrinterConnections();
for (i=0; i<=oPrinters.Count()-1; i++)
WScript.Echo(oPrinters.Item(i)); //Вывод i-го элемента коллекции
/************* Конец *********************************************/
Метод MapNetworkDrive
Если необязательный параметрbUpdateProfile
равен True
, то создаваемое сетевое подключение будет сохранено в профиле пользователя.
Параметры strUser
(имя пользователя) и strPassword
(пароль) нужны в том случае, когда вы подключаете сетевой диск от имени пользователя, которое отличается от имени текущего пользователя, зарегистрированного в системе.
В следующем примере диск "z
" подключается к сетевому ресурсу \\Server1\Programs:
var WshNetwork = WScript.CreateObject("WScript.Network");
WshNetwork.MapNetworkDrive("Z:","\\Server1\Programs");
Метод RemoveNetworkDrive
В качестве параметраstrName
может быть указано либо локальное имя (буква сетевого диска), либо сетевое имя (имя подключенного сетевого ресурса); это зависит от того, каким образом осуществлялось подключение. Если сетевому ресурсу сопоставлена буква локального диска, то параметр strName
должен быть локальным именем. Если сетевому ресурсу не сопоставлена никакая буква, то параметр strName
должен быть сетевым именем.
Если необязательный параметр bForce
равен True
, то отключение сетевого ресурса будет произведено вне зависимости от того, используется этот ресурс в настоящее время или нет.
Если необязательный параметр bUpdateProfile
равен True
, то отключаемое сетевое подключение будет удалено из профиля пользователя.
В следующем примере производится подключение диска "z" к сетевому ресурсу, а затем отключение этого ресурса (листинг 1.11).
Листинг 1.11. Пример подключения и отключения сетевого диска
/*******************************************************************/
/* Имя: MapDrive.js */
/* Язык: JScript */
/* Описание: Подключение/отключение сетевого ресурса */
/*******************************************************************/
//Создаем объект WshNetwork
var WshNetwork = WScript.CreateObject("WScript.Network");
//Подключаем сетевой диск Z:\ к \\Server1\Programs
WshNetwork.MapNetworkDrive("Z:","\\Server1\Programs");
//Отключаем сетевой диск Z:\
WshNetwork.RemoveNetworkDrive("Z:");
/************* Конец *********************************************/
Метод RemovePrinterConnection
В качестве параметраstrName
может быть указано либо локальное имя (название порта), либо сетевое имя (имя подключенного сетевого принтера); это зависит от того, каким образом осуществлялось подключение. Если сетевому ресурсу явным образом сопоставлен локальный порт (например, LPT1), то параметр strName
должен быть локальным именем. Если сетевому принтеру не сопоставлен локальный порт, то параметр strName
должен быть сетевым именем.
Параметры bForce
и bUpdateProfile
в этом методе имеют то же значение, что и одноимённые параметры в методе RemoveNetworkDrive
.
В следующем примере отключается сетевой принтер, который был назначен на порт LPT1
:
var WshNetwork = WScript.CreateObject("WScript.Network");
WshNetwork.RemovePrinterConnection("LPT1:");
Метод SetDefaultPrinter
ПараметрstrName
задает сетевое имя принтера, который должен будет использоваться в системе по умолчанию.
В следующем примере с помощью метода AddPrinterConnection
к порту LPT1: подключается сетевой принтер \\Server1\Epson, который затем устанавливается принтером по умолчанию (листинг 1.12).
Листинг 1.12. Пример использования метода SetDefaultPrinter
/*******************************************************************/
/* Имя: DefPrn.js */
/* Язык: JScript */
/* Описание: Установка принтера по умолчанию */
/*******************************************************************/
//Создаем объект WshNetwork
var WshNetwork = WScript.CreateObject("WScript.Network");
//Подключаем к LPT1 сетевой принтер \\Server1\Epson
WshNetwork.AddPrinterConnection("LPT1:","\\Server1\Epson");
//Устанавливаем принтер по умолчанию
WshNetwork.SetDefaultPrinter("\\Server1\Epson");
/************* Конец *********************************************/
Другие примеры, иллюстрирующие использование объекта WshNetwork
, приведены в главе 2 (см. листинги 2.47–2.52).
Объект WshShell
С помощью объектаWshShell
можно запускать новый процесс, создавать ярлыки, работать с системным реестром, получать доступ к переменным среды и специальным папкам Windows. Создается этот объект следующим образом:
var WshShell=WScript.CreateObject("WScript.Shell");
Объект WshShell
имеет три свойства, которые приведены в табл. 1.7.
Таблица 1.7. Свойства объекта
WshShell
Свойство | Описание |
---|---|
CurrentDirectory |
Здесь хранится полный путь к текущему каталогу (к каталогу, из которого был запущен сценарий) |
Environment |
Содержит объект WshEnvironment , который обеспечивает доступ к переменным среды операционной системы для Windows NT/2000/XP или к переменным среды текущего командного окна для Windows 9х |
SpecialFolders |
Содержит объект WshSpecialFolders для доступа к специальным папкам Windows (рабочий стол, меню Пуск (Start) и т.д.) |
Опишем теперь методы, имеющиеся у объекта
WshShell
(табл. 1.8).
Таблица 1.8. Методы объекта
WshShell
Метод | Описание |
---|---|
AppActivate(title) |
Активизирует заданное параметром title окно приложения. Строка title задает название окна (например, "calc" или "notepad") или идентификатор процесса (ProcessID, PID) |
CreateShortcut(strPathname) |
Создает объект WshShortcut для связи с ярлыком Windows (расширение lnk) или объект WshUrlShortcut для связи с сетевым ярлыком (расширение url). Параметр strPathname задает полный путь к создаваемому или изменяемому ярлыку |
Environment(strType) |
Возвращает объект WshEnvironment , содержащий переменные среды заданного вида |
Exec(strCommand) |
Создает новый дочерний процесс, который запускает консольное приложение, заданное параметром strCommand . В результате возвращается объект WshScriptExec , позволяющий контролировать ход выполнения запущенного приложения и обеспечивающий доступ к потокам StdIn , StdOut и StdErr этого приложения |
ExpandEnvironmentStrings(strString) |
Возвращает значение переменной среды текущего командного окна, заданной строкой strString (имя переменной должно быть окружено знаками "%") |
LogEvent(intType, strMessage [ ,strTarget]) |
Протоколирует события в журнале Windows NT/2000/XP или в файле WSH.log. Целочисленный параметр intТуре определяет тип сообщения, строка strMessage — текст сообщения. Параметр strTarget может задаваться только в Windows NT/2000/XP, он определяет название системы, в которой протоколируются события (по умолчанию это локальная система). Метод LogEvent возвращает true , если событие записано успешно и false в противном случае |
Popup(strТехt, [nSecToWait] , [strTitle], [nType]) |
Выводит на экран информационное окно с сообщением, заданным параметром strText . Параметр nSecToWait задает количество секунд, по истечении которых окно будет автоматически закрыто, параметр strTitle определяет заголовок окна, параметр nType указывает тип кнопок и значка для окна |
RegDelete(strName) |
Удаляет из системного реестра заданный параметр или раздел целиком |
RegRead(strName) |
Возвращает значение параметра реестра или значение по умолчанию для раздела реестра |
RegWrite(strName, anyValue [,strType]) |
Записывает в реестр значение заданного параметра или значение по умолчанию для раздела |
Run(strCommand, [intWindowStyle], [bWaitOnReturn]) |
Создает новый независимый процесс, который запускает приложение, заданное параметром strCommand |
SendKeys(string) |
Посылает одно или несколько нажатий клавиш в активное окно (эффект тот же, как если бы вы нажимали эти клавиши на клавиатуре) |
SpecialFolders(strSpecFolder) |
Возвращает строку, содержащую путь к специальной папке Windows, заданной параметром strSpecFolder |
Рассмотрим методы, приведенные в табл. 1.8, более подробно.
Метод АррActivate
МетодAppActivate
активизирует уже запущенное указанное приложение (устанавливает на него фокус), но не производит никаких действий по изменению размеров его окна. Для того чтобы первоначально запустить нужное приложение и определить вид его окна, следует использовать метод Run
объекта WshShell
. Для того чтобы определить, какое именно приложение необходимо активизировать, строка title
сравнивается по очереди с названиями окон всех запущенных приложений. Если не найдено ни одного точного совпадения, будет производиться поиск того приложения, название окна которого начинается со строки title
. Если и в этом случае не будет найдено ни одного подходящего приложения, то будет вестись поиск приложения, заголовок которого заканчивается на эту строку. Если будет найдено несколько подходящих окон, то произойдет активизация одного из них (окно выбирается произвольно).
В качестве примера использования метода AppActivate
в листинге 1.13 приведен сценарий RunCalc.js, который запускает стандартный калькулятор Windows и выполняет в нем несколько простых арифметических действий (для этого используется метод SendKeys
).
Листинг 1.13. Сценарий RunCalc.js
/*****************************************************************/
/* Имя: RunCalc.js */
/* Язык: JScript */
/* Описание: Активизация приложения с помощью имени окна */
/*****************************************************************/
//Создаем объект WshShell
var WshShell = WScript.CreateObject("WScript.Shell");
//Запускаем Калькулятор
WshShell.Run("calc");
//Приостанавливаем сценарий на 0,1 секунды
WScript.Sleep(100);
//Активизируем Калькулятор
WshShell.AppActivate("Calculator");
//Приостановка сценария на 0,1 секунды
WScript.Sleep(100);
//Посылаем нажатия клавиш в Калькулятор
WshShell.SendKeys("1{+}");
WScript.Sleep(500);
WshShell.SendKeys("2");
WScript.Sleep(500);
WshShell.SendKeys("~");
WScript.Sleep(2500);
/************* Конец *********************************************/
В главе 2 приведены другие примеры использования метода AppActivate
(см. листинги 2.31 и 2.32).
Метод CreateShortcut
Этот метод позволяет создать новый или открыть уже существующий ярлык для изменения его свойств. В листинге 1.14 приведен пример сценария, в котором создаются два ярлыка — на сам выполняемый сценарий (объектoShellLink
и на сетевой ресурс (oUrlLink
).
Листинг 1.14. Пример использования метода CreateShortcut
/*****************************************************************/
/* Имя: MakeShortcuts.js */
/* Язык: JScript */
/* Описание: Создание ярлыков из сценария */
/*****************************************************************/
var WshShell,oShellLink,oUrlLink;
//Создаем объект WshShell
WshShell=WScript.CreateObject("WScript.Shell");
//Создаем ярлык на файл
oShellLink=WshShell.CreateShortcut("Current Script.lnk");
//Устанавливаем путь к файлу
oShellLink.TargetPath=WScript.ScriptFullName;
//Сохраняем ярлык
oShellLink.Save();
//Создаем ярлык на сетевой ресурс
oUrlLink = WshShell.CreateShortcut("Microsoft Web Site.URL");
//Устанавливаем URL
oUrlLink.TargetPath = "http://www.microsoft.com";
//Сохраняем ярлык
oUrlLink.Save();
/************* Конец *********************************************/
Примеры работы с ярлыками приведены в листингах 1.19–1.24, 2.43 и 2.44.
Метод Environment
ПараметрstrType
задает вид переменных среды, которые будут записаны в коллекции WshEnvironment
; возможными значениями этого параметра являются "System" (переменные среды операционной системы), "User" (переменные среды пользователя), "Volatile" (временные переменные) или "Process" (переменные среды текущего командного окна).
В следующем примере мы распечатываем число процессоров, имеющихся в компьютере с операционной системой Windows NT/2000/XP (переменнаяЗамечание
Для Windows 9х единственным допустимым значением параметраstrType
является "Process".
NUMBER_OF_PROCESSORS
), и путь к каталогу Windows (листинг 1.15).
Листинг 1.15. Печать значений переменных среды (объект WshShell.Environment
)
/*****************************************************************/
/* Имя: ShowEnvir.js */
/* Язык: JScript */
/* Описание: Получение значений некоторых переменных среды */
/*****************************************************************/
var WshShell,WshSysEnv;
//Создаем объект WshShell
WshShell = WScript.CreateObject("WScript.Shell");
//Создание коллекции WshEnvironment
WshSysEnv = WshShell.Environment("SYSTEM");
WScript.Echo(WshSysEnv("NUMBER_OF_PROCESSORS"));
WScript.Echo(WshShell.Environment.Item("WINDIR"));
/************* Конец *********************************************/
Метод ExpandEnvironmentString
В следующем примере на экран выводится путь к каталогу Windows (листинг 1.16).Листинг 1.16. Печать значений переменных среды (ExpandEnvironmertStrings
)
/*****************************************************************/
/* Имя: ExpEnvStr.js */
/* Язык: JScript */
/* Кодировка: Windows */
/* Описание: Получение значений переменный среды с помощью */
/* метода ExpandEnvironmentString */
/*****************************************************************/
var WS = WScript.CreateObject("WScript.Shell");
WScript.Echo("Каталог Windows:"+WS.ExpandEnvironmentStrings("%WinDir%"));
/************* Конец *********************************************/
Метод LogEvent
В Windows NT/2000/XP события записываются в системном журнале, а в Windows 9х — в файле WSH.log, расположенном в каталоге пользователей Windows. Запись в WSH.log будет содержать время события, его тип и текст. Типы сообщений описаны в табл. 1.9.Таблица 1.9. Типы сообщений (параметр
intType
)
Код | Значение | Код | Значение |
---|---|---|---|
0 | SUCCESS |
4 | INFORMATION |
1 | ERROR |
8 | AUDIT_SUCCESS |
2 | WARNING |
16 | AUDIT_FAILURE |
В следующем примере производится протоколирование работы сценария регистрации (здесь предполагается, что если этот сценарий отработал успешно, то функция
RunLoginScript
возвращает true, в противном случае — false
):
var WshShell = WScript.CreateObject("WScript.Shell");
rc = RunLoginScript();
if (rc) WshShell.LogEvent(0,"Logon Script Completed Successfully");
else WshShell.LogEvent(1,"Logon Script failed");
Метод Popup
Если в методе не задан параметрstrTitle
, то по умолчанию заголовком окна будет "Windows Script Host."
Параметр nType
может принимать те же значения, что и в функции MessageBox
из Microsoft Win32 API. В табл. 1.10 описаны некоторые возможные значения параметра nType и их смысл (полный список значений этого параметра можно посмотреть в описании функции MessageBox в документации по функциям Windows API).
Таблица 1.10. Типы кнопок и иконок для метода
Popup
Значение nType |
Константа Visual Basic | Описание |
---|---|---|
0 | vbOkOnly |
Выводится кнопка OK |
1 | vbOkCancel |
Выводятся кнопки OK и Отмена (Cancel) |
2 | vbAbortRetryIgnore |
Выводятся кнопки Стоп (Abort), Повтор (Retry) и Пропустить (Ignore) |
3 | vbYesNoCancel |
Выводятся кнопки Да (Yes), Нет (No) и Отмена (Cancel) |
4 | vbYesNo |
Выводятся кнопки Да (Yes) и Нет (No) |
5 | vbRetryCancel |
Выводятся кнопки Повтор (Retry) и Отмена (Cancel) |
16 | vbCritical |
Выводится значок Stop Mark |
32 | vbQuestion |
Выводится значок Question Mark |
48 | vbExclamation |
Выводится значок Exclamation Mark |
64 | vbInformation |
Выводится значок Information Mark |
Замечание
В сценариях, написанных на языке VBScript, можно непосредственно использовать именованные константы типаvbOkCancel
без предварительного их объявления. Для того чтобы использовать такие константы в JScript-сценариях, их нужно предварительно объявить как переменные и присвоить нужные значения (например, var vbOkCancel=1;
). Естественно, в любых сценариях вместо имен констант можно использовать их числовые значения.
В методе Popup
можно комбинировать значения параметра, приведенные в табл. 1.10. Например, в результате выполнения следующего сценария:
var WshShell = WScript.CreateObject("WScript.Shell");
WshShell.Popup("Копирование завершено успешно", 5, "Ура",65);
на экран будет выведено информационное окно, показанное на рис. 1.11, которое автоматически закроется через 5 секунд.
Рис. 1.11. Информационное окно, созданное методом Popup
Метод Popup возвращает целое значение, с помощью которого можно узнать, какая именно кнопка была нажата для выхода (табл. 1.11).
Таблица 1.11. Возвращаемые методом
Popup
значения
Значение | Константа Visual Basic | Описание |
---|---|---|
-1 | Пользователь не нажал ни на одну из кнопок в течение времени, заданного параметром nSecToWait |
|
1 | vbOk |
Нажата кнопка OK |
2 | vbCancel |
Нажата кнопка Отмена (Cancel) |
3 | vbAbort |
Нажата кнопка Стоп (Abort) |
4 | vbRetry |
Нажата кнопка Повтор (Retry) |
5 | vbIgnore |
Нажата кнопка Пропустить (Ignore) |
6 | vbYes |
Нажата кнопка Да (Yes) |
7 | vbNo |
Нажата кнопка Нет (No) |
Примеры вывода информации с помощью метода
Popup
представлены в главе 2 (см. листинги 2.13 и 2.14).
Метод RegDelete
Если параметрstrName
оканчивается символами \\
, то этот метод удаляет ключ целиком (вместе со всеми параметрами внутри его), в противном случае удаляется только один заданный параметр. Параметр strName
должен начинаться с одного из следующих корневых ключей (табл. 1.12).
Таблица 1.12. Названия ключей
Краткое название | Длинное название |
---|---|
HCKU |
HKEY_CURRENT_USER |
HKLM |
HKEY_LOCAL_MACHINE |
HKCR |
HKEY_CLASSES_ROOT |
HKEY_USERS |
|
HKEY_CURRENT_CONFIG |
Пример, иллюстрирующий применение метода
RegDelete
, приведен в главе 2 (см. листинги 2.45 и 2.46).
Метод RegRead
С помощью этого метода можно прочитать следующие типы данных:REG_SZ
, REG_EXPAND_SZ
, REG_DWORD
, REG_BINARY
и REG_MULTI_SZ
. Если в реестре содержатся данные других типов, то метод RegRead
вернет значение DISP_E_TYPEMISMATCH
.
Если параметр strName
оканчивается символами \\
, то этот метод считывает значение по умолчанию для раздела (если оно установлено), в противном случае читается значение параметра.
В следующем примере на экран выводятся считанные из реестра с помощью метода RegRead
значение параметра и значение по умолчанию для раздела реестра (листинг 1.17).
Листинг 1.17. Чтение значений параметра и раздела системного реестра
/********************************************************************/
/* Имя: RegRead.js */
/* Язык: JScript */
/* Описание: Чтение значений параметра и раздела системного реестра */
/********************************************************************/
var WS,s;
//Создаем объект WshShell
WS = WScript.CreateObject("WScript.Shell");
s="Значение параметра\n";
s+="HKCU\\Control Panel\\Keyboard\\KeyboardSpeed = ";
//Читаем значение параметра реестра
s+=WS.RegRead("HKCU\\Control Panel\\Keyboard\\KeyboardSpeed")+"\n\n";
s+="Значение по умолчанию для раздела\n";
s+="HKCU\\Control Panel\\Keyboard\\ = ";
//Читаем значение по умолчанию для раздела реестра
s+=WS.RegRead("HKCU\\Control Panel\\Keyboard\\");
//Вывод на экран сформированной строки
WScript.Echo(s);
/************* Конец ***********************************************/
Метод RegWrite
Если параметрstrName
оканчивается символами \\
, то этот метод записывает раздел; если такого раздела нет, он будет создан. Если в конце strName
отсутствуют символы \\
, то производится запись указанного параметра в нужный раздел; если такого параметра нет, он будет создан с указанным именем и значением.
Параметр anyValue
метода задает значение, которое нужно записать в заданный параметром strName
параметр или раздел реестра. Необязательный параметр strType
определяет тип записываемого значения. В качестве strType
можно указывать "REG_SZ
", "REG_EXPAND_SZ
", "REG_DWORD
" и "REG_BINARY
". Если в качестве параметра strType
передается другое значение, то метод RegWrite
вернет значение E_INVALIDARG
.
В случае, когда strType
установлено в "REG_SZ
" или "REG_EXPAND_SZ
", метод RegWrite
автоматически конвертирует параметр anyValue
в строку. Если значение strType
равно "REG_DWORD
", то anyValue
переводится в целый формат. Если strType равно "REG_BINARY
", то anyValue
должно быть целым числом.
Пример, иллюстрирующий применение метода RegWrite, приведен в главе 2 (см. листинги 2.45 и 2.46).
Метод Run
ПараметрintWindowStyle
устанавливает вид окна для запускаемого приложения (табл. 1.13).
Таблица 1.13. Типы окна (
intWindowStyle
)
Параметр | Константа Visual Basic | Описание |
---|---|---|
0 | vbHide |
Прячет текущее окно и активизирует другое окно (показывает его и передает ему фокус) |
1 | vbNormalFocus |
Активизирует и отображает окно. Если окно было минимизировано или максимизировано, система восстановит его первоначальное положение и размер. Этот флаг должен указываться сценарием во время первого отображения окна |
2 | vbMinimizedFocus |
Активизирует окно и отображает его в минимизированном (свернутом) виде |
3 | vbMaximizedFocus |
Активизирует окно и отображает его в максимизированном (развернутом) виде |
4 | vbNormalNoFocus |
Отображает окно в том виде, в котором оно находилось последний раз. Активное окно при этом остается активным |
5 | Активизирует окно и отображает его в текущем состоянии | |
6 | vbMinimizedNoFocus | Минимизирует заданное окно и активизирует следующее (в Z-порядке) окно |
7 | Отображает окно в свернутом виде. Активное окно при этом остается активным | |
8 | Отображает окно в его текущем состоянии. Активное окно при этом остается активным | |
9 | Активизирует и отображает окно. Если окно было минимизировано или максимизировано, система восстановит его первоначальное положение и размер. Этот флаг должен указываться, если производится восстановление свернутого окна (его нельзя использовать в методе Run ) |
|
10 | Устанавливает режим отображения, опирающийся на режим программы, которая запускает приложение |
Необязательный параметрЗамечание
В сценариях, написанных на языке VBScript, можно непосредственно использовать именованные константы типаvbHide
без предварительного их объявления. Для того чтобы использовать такие константы в JScript-сценариях, их нужно предварительно объявить как переменные и присвоить нужные значения (например,var vbHide=0;
). Естественно, в любых сценариях вместо имен констант можно использовать их числовые значения.
bWaitOnReturn
является логической переменной, дающей указание ожидать завершения запущенного процесса. Если этот параметр не указан или установлен в false
, то после запуска из сценария нового процесса управление сразу же возвращается обратно в сценарий (не дожидаясь завершения запущенного процесса). Если же bWaitOnReturn
установлен в true
, то сценарий возобновит работу только после завершения вызванного процесса.
При этом если параметр bWaitOnReturn
равен true
, то метод Run
возвращает код выхода вызванного приложения. Если же bWaitOnReturn
равен false
или не задан, то метод Run
всегда возвращает ноль.
В следующем примере мы запускаем Блокнот (notepad.exe) и открываем в нем файл с выполняемым сценарием:
var WshShell = WScript.CreateObject("WScript.Shell");
WshShell.Run("%windir%\\notepad" + WScript.ScriptFullName);
Следующий сценарий печатает код выхода вызванного приложения (листинг 1.18).
Листинг 1.18. Вывод кода выхода запущенного приложения
/********************************************************************/
/* Имя: RetCode.js */
/* Язык: JScript */
/* Описание: Вывод кода выхода запущенного приложения */
/********************************************************************/
//Создаем объект WshShell
var WshShell = WScript.CreateObject("WScript.Shell");
//Запускаем Блокнот и ожидаем завершения его работы
Return = WshShell.Run("notepad " + WScript.ScriptFullName, 1, true);
//Печатаем код возврата
WScript.Echo("Код возврата:", Return);
/************* Конец ***********************************************/
Другие примеры запуска приложений с помощью метода Run приведены в главе 2 (см. листинги 2.31 и 2.32).
Метод SendKeys
Каждая клавиша задается одним или несколькими символами. Например, для того чтобы задать нажатие друг за другом букв А, Б и В, нужно указать в качестве параметра дляSendKeys
строку "АБВ
": string="AБB"
.
Несколько символов имеют в методе SendKeys специальное значение: +
, ^
, %
, ~
, (
, )
. Для того чтобы задать один из этих символов, их нужно заключить в фигурные скобки {}
. Например, для задания знака плюс используется {+}
. Квадратные скобки []
хотя и не имеют в методе SendKeys специального смысла, их также нужно заключать в фигурные скобки. Кроме этого, для задания самих фигурных скобок следует использовать следующие конструкции: {{}
(левая скобка) и {}}
(правая скобка).
Для задания неотображаемых символов, таких как <Enter> или <Tab> и специальных клавиш, в методе SendKeys
используются коды, представленные в табл. 1.14.
Таблица 1.14. Коды специальных клавиш для
SendKeys
... Все права на текст принадлежат автору: Андрей Владимирович Попов.
Это короткий фрагмент для ознакомления с книгой.