Знакомство
В этой статье пойдет разговор о
возможностях Windows Script Host в Windows. Естественно, статья не
способна заменить всю документацию, но мы попытаемся охватить основные
моменты и дать несколько полезных и употребительных примеров.
Что такое Windows Script Host?
Для чего же все-таки нужен WSH? WSH
позволяет работать с файловой системой, реестром, сетевыми соединениями
(диски, принтеры), окружением и др. С помощью wsh-скриптов можно
управлять запуском программ, посылать сигналы другим процессам,
удаленно администрировать систему, работать с сетевым принтером,
управлять входом в систему (login-скрипты) и многое другое. Скрипты для
Windows Script Host могут быть не только отдельными программами, но и
встраиваться в HTML-страницы, и использоваться в Active Server Pages
(ASP), JScript, VBScript или PerlScript
Где взять Windows Script Host?
Windows Script Host (WSH) встроена в
Microsoft Windows 98/Me/2000. Если вы до сих пор пользуетесь Windows
95,то можете загрузить Windows Script Host с сайта Microsoft.
Кстати, последняя версия имеет номер 5.6, поэтому пользователи Windows
98/Me/2000 также могут обновить свою версию с 1.0 или 2.0 до текущей,
имеющей дополнительные возможности.
Первые шаги
Скрипт WSH является обычным текстовым
файлом с расширениями .js, vbs и подключаются с помощью ActiveXObject в
JS- и VBS-скриптах (в т.ч. в HTML). Кроме этого, WSH-скрипты могут
содержаться в "своих" файлах - *.wsh и *.wsf (wsh-файлы - это скрипты
для старых версий WSH). Эти файлы представляют собой специальные
XML-конструкции. В одном файле можно использовать все доступные
скриптовые языки.
Создадим первый учебный скрипт в обычном блокноте.
Запустите блокнот. Напечатайте следующий текст:
WScript.Echo("Здравствуй, мир!");
Сохраните файл с расширением .js (вместо .txt). Пусть это будет
Hello.js. Запустите Проводник и щелкните на созданном файле. WSHost
запустит движок JScript и исполнит наш скрипт. В результате наших
действий появится сообщение "Здравствуй, мир!"
Итак, у вас получилось! Но действительные возможности
WSH гораздо шире. Вы можете создавать полноценные программы, имеющие
очень маленькие размеры файлов. Для примера могу посоветовать скачать
две программы (Настроить вид папки 1.0 и Сохранить выделенный текст
1.0) с сайта http://winchanger.narod.ru. Эти программы полностью
написаны на WSH. Обратите внимание, что даже инсталяция этих программ
сделана на WSH.
Объектная модель WSH
Для того, чтобы воспользоваться всеми возможностями,
которые представляет эта технология, нужно хорошенько разобраться в ее
структуре. Windows Script Host состоит из 14 объектов. Самым главным
объектом является объект WScript.
Рассмотрим основные объекты и их возможности
- WScript
-
- Устанавливает или получает аргументы командной
строки.
- Определяет имя скриптового файла.
- Определяет имя хоста для скрипта (wscript.exe или
cscript.exe)
- Определяет версию хоста
- Создает, соединяется или отсоединяется от
объектов COM
- Программно останавливает выполнение скрипта
- Выводит сообщения
- WshArguments
- Получает доступ к аргументам командной строки
- WshNamed
- Получает доступ к именованным аргументам командной
строки
- WshUnnamed
- Получает доступ к безымённым аргументам командной
строки
- WshNetwork
- Работа с сетью
- WshController
- Для работы со скриптами удаленного управления
- WshRemote
- Удаленные скрипты
- WshRemote Error
- Информация об ошибках (для WshRemote)
- WshShell
- Работа с оболочкой Windows
- WshShortcut
- Создание ярлыков
- WshSpecialfolders
- Пути к специальным папкам Windows
- WshURLShortcut
- Создание интернет-ссылок
- WshEnvironment
- Доступ к коллекции переменных окружения
- WshScriptExec
- Работа со скриптами
Объект Wscript
Все объекты имеют свои свойства и методы. Не будем
утомлять читателя перечислением всех свойств объектов. Приведем только
свойства для Wscript
| Свойство |
Описание |
| Arguments |
Возвращает указатель на список аргументов
командной строки |
| FullName |
Возвращает имя исполняемого файла хоста и полный
путь к нему (например, C:\Windows\wscript.exe) |
| Name |
Выводит замечательную надпись Windows Scripting
Host |
| Path |
Определяет каталог и путь, содержащие wscript.exe
или cscript.exe |
| ScriptFullName |
Возвращает полный путь и имя исполняемого в
данный момент скрипта |
| ScriptName |
То же, что и ScriptFullName, но без пути |
| Version |
Возвращает версию установленного Windows
Scripting Host |
Приведем теперь пример с использованием VBScript
Листинг файла sample.vbs
' Пример работы со свойствами WScript WScript.Echo WScript.FullName WScript.Echo WScript.Name WScript.Echo WScript.Path WScript.Echo WScript.ScriptFullName WScript.Echo WScript.ScriptName WScript.Echo WScript.Version
Возможности WSH
Пора перейти к конкретным примерам, которые могут
пробудить ваш интерес к WSH
Drag'n'Drop
Как уже говорилось выше, WSH имеет богатые возможности
для работы с файлами, реестром и так далее. Кроме того, WSH
поддерживает Drag'n'Drop. С помощью объекта WScript.Arguments в своем
скрипте вы получаете имена файлов, с которыми вам надо работать.
Сохраните файл dragndrop.vbs (листинг ниже) на диске, откройте
Проводник и теперь просто перетащите любые файлы на ваш скрипт, который
покажет их имена (пути к ним).
Листинг файла dragndrop.vbs
' Пример Drag'n'Drop Set objArgs = WScript.Arguments For I = 0 to objArgs.Count - 1 WScript.Echo objArgs(I) Next
Создание ярлыков
Также просто создавать ярлыки. Рассмотрим пример
создания ярлыка к калькулятору и поместим его в Автозагрузку.
Листинг файла createshortcut.vbs
' Этот пример показывает, как создавать ярлык к программе ' и копировать его в заданную папку L_Welcome_MsgBox_Message_Text = _ "Этот скрипт создаст ярлык к калькулятору и поместит его в Автозагрузку" L_Welcome_MsgBox_Title_Text = "Для журнала Программист"
Call Welcome() ' Создаем ярлык Dim WSHShell Set WSHShell = WScript.CreateObject("WScript.Shell") Dim MyShortcut, MyDesktop, StartupPath ' Узнаем путь к специальной папке Автозагрузка StartupPath = WSHShell.SpecialFolders("Startup") ' Создаем ярлык для Автозагрузки Set MyShortcut = WSHShell.CreateShortcut(StartupPath & _ "\Ярлык к калькулятору.lnk") ' Устанавливаем свойства для ярлыка MyShortcut.TargetPath = WSHShell.ExpandEnvironmentStrings("%windir%\calc.exe") MyShortcut.WorkingDirectory = WSHShell.ExpandEnvironmentStrings("%windir%") MyShortcut.WindowStyle = 4 MyShortcut.IconLocation = _ WSHShell.ExpandEnvironmentStrings("%windir%\calc.exe, 0") MyShortcut.Save WScript.Echo "Ярлык к калькулятору создан и помещен в Автозагрузку" Sub Welcome() Dim intDoIt intDoIt = MsgBox(L_Welcome_MsgBox_Message_Text, _ vbOKCancel + vbInformation, _ L_Welcome_MsgBox_Title_Text ) If intDoIt = vbCancel Then WScript.Quit End If End Sub
Специальные папки
Здесь необходимо сказать несколько слов о специальных
папках. В предыдущем примере мы использовали одну такую папку
Автозагрузка. Но дело в том, что в английской версии Windows
аналогичная папка носит имя Startup, и если вы укажете точный путь
вроде C:\WINDOWS\Главное меню\Программы\Автозагрузка, то это
сработает в русской версии Windows и нигде больше. Чтобы избежать этих
проблем Microsoft создала список специалных папок.Чтобы получить доступ
к какой-либо специальной папке можно воспользоваться свойством
SpecialFolders объекта WshShell.
Листинг файла specfol.js
// Десктоп текущего пользователя var WshShell = WScript.CreateObject("WScript.Shell"); strDesktop = WshShell.SpecialFolders("Desktop"); WScript.Echo( strDesktop); // Десктоп общий для всех пользователей strDesktop = WshShell.SpecialFolders("AllUsersDesktop"); WScript.Echo( strDesktop); //Автозагрузка strDesktop = WshShell.SpecialFolders("Startup"); WScript.Echo( strDesktop); //Главное меню strDesktop = WshShell.SpecialFolders("StartMenu"); WScript.Echo( strDesktop);
Реестр
Еще больше возможностей для реализации ваших фантазий
предоставляет работа с реестром. Для этого используется объект
Wscript.Shell с его методами RegRead, RegWrite, RegDelete.
Приведу пример создания записи в реестре, позволяющий менять заголовок
в Internet Explorer
Листинг файла ie_title.vbs
' меняем заголовок у Internet Explorer
Dim WshShell, bKey Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.RegWrite "HKCU\Software\Microsoft\Internet Explorer\Main\Window Title", "Я читаю журнал Программист", "REG_SZ"
WScript.Echo "Запустите браузер и посмотрите на заголовок!"
' чтобы удалить созданную строку, ' уберите комментарий со следующий строки 'WshShell.RegDelete "HKCU\Software\Microsoft\Internet Explorer\Main\Window Title"
Запуск других приложений
Объект WshShell позволяет запускать другие приложения. В
следующем примере мы запускаем две копии Блокнота - новый экземпляр и с
содержимым нашего скрипта
Set WshShell = WScript.CreateObject("WScript.Shell") ' Запускаем новый экземпляр Блокнота WshShell.Run "%windir%\notepad" ' Открываем наш скрипт в Блокноте WshShell.Run "%windir%\notepad " & WScript.ScriptFullName
Работа с файлами
Также легко можно копировать, переносить и удалять файлы
и папки. Не представляет сложности и работа с просмотром содержимого
файла и его редактирования. Освоив данные возможности, вы получаете
возможность работать с файлами autoexec.bat и config.sys, проверять
значения параметров в win.ini, вести логи работы пользователей
Для этого надо инициализировать объект файловой системы
FSO, а затем воспользоваться одним из его методов для открытия файла:
Листинг для файла open.vbs
' Только для примера! Const ForReading = 1, ForWriting = 2, ForAppending = 8 Dim fso, f Set fso = CreateObject("Scripting.FileSystemObject") Set f = fso.OpenTextFile("c:\autoexec.bat", ForAppending, True) f.Write "Hello world!" f.Close
Итак, OpenTextFile открывает файл, если
его нет, то создается новый файл. Из параметров, передаваемых методу,
обязательным является только первый - имя файла. Остальные параметры
можно не указывать. Вторым параметром устанавливается режим открытия
файла. Возможные значения следующие:
- 1 - файл открывается только для чтения
- 2 - файл открывается для записи. Причем, все
содержимое файла, которое было до этого, уничтожится
- 8 - файл открывается для добавления данных.
Все, что вы запишите, будет добавлено в конец файла. Довольно удобно
для ведения различных логов
Третья переменная может принимать значение true или
false. Она показывает, создавать ли новый файл, если его до этого не
существовало. Если значение равно true, то новый файл будет создан.
Вот мы с вами и рассмотрели наиболее используемые
возможности WSH. Надеюсь, данная технология заинтересовала вас и вы
самостоятельно продолжите изучение документации. Удачного вам
программирования!
Александр Климов (terminator2@mail.ru)
|