Объект WshShell

С помощью объекта WshShell можно запускать новый процесс, создавать ярлыки, работать с системным реестром, получать доступ к переменным среды и специальным папкам Windows. Создается этот объект следующим образом:

var WshShell=WScript.CreateObject("WScript.Shell");

Свойства

CurrentDirectoryВозвращает строку, путь к текущему каталогу.
EnvironmentВозвращает объект, который позволяет получить значения переменных среды
SpecialFoldersВозвращает полный путь к специальным папкам типа меню Пуск.

Методы

AppActivateАктивизирует указанное окно приложения.
CreateShortcutСоздает ярлыки файлов или URL
ExecСоздаёт дочерний процесс, который запускает заданное приложение.
ExpandEnvironmentStringsВозвращает значение переменной среды текущего командного окна.
LogEventПозволяет записать сообщение в event log.
PopupВыводит на экран модальное окно сообщения.
RunСоздаёт новый независимый процесс, который запускает заданное приложение.
RegReadВозвращает значение ключа или записи реестра по его имени
RegWriteСоздает новые ключ или запись реестра или записывает новое значение существующих.
RegDeleteУдаляет ключ или запись реестра
SendKeysПозволяет эмулировать клавиатурный ввод.

CurrentDirectory

Синтаксис

// Свойство. Чтение и запись.

WshShell.CurrentDirectory

Возвращаемое значение

Строка, путь к текущему каталогу.

Пример

var WshShell = WScript.CreateObject("WScript.Shell")
WScript.Echo ( WshShell.CurrentDirectory );

Environment

Синтаксис

// Свойство. Чтение и запись. В коллекцию можно добавлять элементы и удалять их.

WshShell.Environment ( [sType] )

Возвращаемое значение

Объект-коллекция WshEnvironment, содержащая переменные среды. Необязательный параметр sType - строка, задаёт вид переменных. Возможные значения:

Если sType не указан, этот метод получает системные переменные в Windows.

Следующие переменные предоставляются операционной системой Windows. Скрипты могут также получить переменные окружения, которые были установлены другими прикладными программами.

НазваниеОписание
NUMBER_OF_PROCESSORSЧисло процессоров, используемых в компьютере.
PROCESSOR_ARCHITECTUREТип процессора автоматизированного рабочего места пользователя.
PROCESSOR_IDENTIFIERИдентификатор процессора автоматизированного рабочего места пользователя.
PROCESSOR_LEVELУровень процессора автоматизированного рабочего места пользователя.
PROCESSOR_REVISIONВерсия процессора автоматизированного рабочего места пользователя.
OSОперационная система на автоматизированном рабочем месте пользователя.
COMSPECВыполнимая программа для команды command prompt (обычно cmd.exe).
HOMEDRIVEПервичный локальный диск (обычно диск C).
HOMEPATHОсновной каталог для пользователей по умолчанию (для Windows NT это - обычно \users\default.
PATHПеременная окружения PATH.
PATHEXTРасширения для исполняемых файлов (обычно .com, .exe, .bat, или .cmd).
PROMPTКомандная строка (обычно $P$G).
SYSTEMDRIVEЛокальный диск, на котором находится системный каталог (например, c:\).
SYSTEMROOTКаталог ОС (например, c:\winnt). Аналогичен WINDIR.
WINDIRКаталог ОС (например, c:\winnt). Аналогичен SYSTEMROOT.
TEMPКаталог для хранения временных файлов (например, c:\temp). User, Volatile
TMPКаталог для хранения временных файлов (например, c:\temp). User, Volatile

Объект WshEnvironment

Объект WshEnvironment позволяет получить доступ к коллекции, содержащей переменные среды заданного типа (переменные среды операционной системы, переменные среды пользователя или переменные среды текущего командного окна). Объект имеет три свойства и один метод:

Item
Свойство Item устанавливает или возвращает значение (strValue) переменной окружения strName. Это свойство - используется по умолчанию:
WshEnvironment.Item ( strName ) [ = strValue ]

WshEnvironment ( strName ) = [ strValue ]
Count
Свойство Count предоставляет количество перечисленных элементов:
WshEnvironment.Count 
length
Свойство length предоставляет количество перечисленных элементов. Это свойство обеспечивает ту же функциональность, что и Count и введено только для совместимости с JScript.
WshEnvironment.length
Remove()
Метод Remove() удаляет переменную окружения, определяемую strName
WshEnvironment.Remove(strName) 

Примеры

var WshShell = WScript.CreateObject("WScript.Shell")
var WshEnv = WshShell.Environment;
WScript.Echo ( WshEnv.Item("WINDIR") );

// Определить системную переменную NUMBER_OF_PROCESSORS
var WshSysEnv = WshShell.Environment("SYSTEM");
WScript.ECHO ( WshSysEnv ("NUMBER_OF_PROCESSORS") );


// Удалить несколько переменных
var WshUsrEnv = Wscript.Environment("User");
WshUsrEnv.Remove("EXAMPLE_1");
WshUsrEnv.Remove("EXAMPLE_2");
WshUsrEnv.Remove("EXAMPLE_3");
WshUsrEnv.Remove("EXAMPLE_4")


// Установить переменной окружения EXAMPLE значение A_VALUE
var WshShell = WScript.CreateObject("Wscript.Shell");
var WshEnv = WshShell.Environment("VOLATILE");
WshEnv("EXAMPLE") = "A_VALUE";

// Отобразить весь список временных переменных окружения
var e = new Enumerator ( WshShell.Environment("VOLATILE") );
var s='';
for (e.moveFirst(); !e.atEnd(); e.moveNext()) 
  s += e.item() + '\n';
WScript.Echo (s);

// Удалить переменную окружения EXAMPLE
WshShell.Environment("VOLATILE").Remove("EXAMPLE");

SpecialFolders

Синтаксис

// Свойство. Только чтение.

WshShell.SpecialFolders [( НаименованиеСпециальнойПапки )]

Возвращаемое значение

Объект-коллекция WshSpecialFolders, содержащая пути к специальным папкам Windows. Некоторые специальные папки:


Объект-коллекция WshSpecialFolders

Объект имеет три свойства:

Item
Свойство Item возвращает полный путь к специальной папке, определяемой strFolderName. Это свойство - используется по умолчанию:
WshShell.SpecialFolders.Item("strFolderName")

WshShell.SpecialFolders("strFolderName")
Count
Свойство Count предоставляет количество перечисленных элементов:
WshShell.SpecialFolders.Count 
length
Свойство length предоставляет количество перечисленных элементов. Это свойство обеспечивает ту же функциональность, что и Count и введено только для совместимости с JScript.
WshShell.SpecialFolders.length

Пример

var WshShell = WScript.CreateObject("WScript.Shell");

// возвращает полный путь к папке рабочего стола Windows
var StrMyDesktop = WshShell.SpecialFolders;
WScript.Echo ( 
   StrMyDesktop.Item("Desktop") + '\n' +
   WshShell.SpecialFolders("Desktop") ); // Для сравнения

// Перечислить все специальные папки
var s='', e = new Enumerator ( WshShell.SpecialFolders );
for (e.moveFirst(); !e.atEnd(); e.moveNext()) 
  s += e.item() + '\n';
WScript.Echo (s);

AppActivate()

Метод AppActivate() активизирует указанное окно какого-либо приложения. Возвращает true в случае успеха и false в случае неудачи.

Синтаксис

WshShell.AppActivate( Title )

Параметры

Title
Заголовок окна приложения или идентификатор процесса.

Комментарии

Если в качестве параметра указан заголовок окна приложения, значение параметра сравнивается по очереди с заголовками окон всех запущенных приложений. Если не найдено ни одного точного совпадения, будет производиться поиск окна, заголовок которого начинается с указанной строки. Если и в этом случае не будет найдено ни одного подходящего окна, будет производиться поиск окна, заголовок которого заканчивается на указанную строку. Если будет найдено несколько подходящих окон, произойдёт активизация одного из них (произвольно).

Пример

var WshShell = WScript.CreateObject("WScript.Shell");
var WshExec = WshShell.Exec("calc");
WScript.Sleep (2000);
var Res = WshShell.AppActivate(WshExec.ProcessID);
if ( Res ) WshShell.SendKeys("2*2=");

В приведенном примере запускается калькулятор, его окно помещается в топ активных и моделируется ввод с клавиатуры в активное окно.

CreateShortcut()

Метод CreateShortcut() возвращает объект WshShortcut или WshURLShortcut, указывающий на ярлык .lnk или .url.

Синтаксис

WshShell.CreateShortcut( Path )

Параметры

Path
Строка, полный путь к создаваемому или изменяемому файлу ярлыка.

Пример

var WshShell = WScript.CreateObject("WScript.Shell");
var WshURLShortcut = WshShell.CreateShortcut("C:\Microsoft.url");
WshURLShortcut.TargetPath = "http://microsoft.com";
WshURLShortcut.Save();

Exec()

Метод Exec() создаёт новый дочерний процесс (т.е. процесс с теми же переменными среды), который запускает заданное консольное приложение. Возвращается объект "WshScriptExec, который позволяет контролировать ход выполнения запущенного приложения и обеспечивает доступ к потокам StdIn, StdOut и StdErr этого приложения.

Синтаксис

WshShell.Exec( Command )

Параметры

Command
Строка, командная строка запуска приложения.

Комментарии

С помощью данного метода можно запускать и графические оконные приложения. В этом случае возвращаемый объект WshScriptExec полезен тем, что позволяет получить идентификатор запущенного процесса, который можно использовать, например, для активизации приложения с помощью метода AppActivate.

Примеры

var WshShell = WScript.CreateObject("WScript.Shell")
var WshExec = WshShell.Exec("nslookup 127.0.0.1")
WScript.Sleep (7000);
var TextStream = WshExec.StdOut;
var s='';
while(!TextStream.AtEndOfStream)
   { s += TextStream.ReadLine()+'\n'; }
WScript.Echo ( s );


var WshShell = WScript.CreateObject("WScript.Shell");
var WshExec = WshShell.Exec("notepad");
WScript.Sleep (2000);
WshShell.AppActivate(WshExec.ProcessID);
WshShell.SendKeys ("0123456789");

ExpandEnvironmentStrings()

Метод ExpandEnvironmentStrings() возвращает значение переменной среды текущего командного окна.

Синтаксис

WshShell.ExpandEnvironmentStrings( String )

Параметры

String
Строка, имя переменной. Должно быть окружено знаками "%".

Пример

var WshShell = WScript.CreateObject("WScript.Shell");
WScript.Echo ( WshShell.ExpandEnvironmentStrings("%WinDir%") );

LogEvent()

Метод LogEvent() протоколирует событие в журнале Windows. Возвращает true в случае успеха и false в противном случае.

Синтаксис

WshShell.LogEvent( Type, Message, Target )

Параметры

Type
Число, тип сообщения. Возможные значения:
  •   0 - SUCCESS
  •   1 - ERROR
  •   2 - WARNING
  •   4 - INFORMATION
  •   8 - AUDIT_SUCCESS
  • 16 - AUDIT_FAILURE
Message
Строка, текст сообщения.
Target
Строка, название системы, в которой протоколируется событие (по умолчанию - локальная система).

Пример

var WshShell = WScript.CreateObject("WScript.Shell")
WshShell.LogEvent (4, "Test event!")

Popup()

Метод Popup() выводит на экран модальное окно сообщения.

Синтаксис

WshShell.Popup( Text, SecondsToWait, Title, Type )

Параметры

Text
Строка, текст сообщения.
SecondsToWait
  Необязательный, число. Количество секунд, по истечении которого окно будет автоматически закрыто.
Title
Необязательный, строка. Текст заголовка окна сообщения.
Type
Необязательный, число. Комбинация флагов, определяет тип кнопок и значка. Возможные значения флагов:
  •   0 - кнопка ОК.
  •   1 - кнопки ОК и Отмена.
  •   2 - кнопки Стоп, Повтор, Пропустить.
  •   3 - кнопки Да, Нет, Отмена.
  •   4 - кнопки Да и Нет.
  •   5 - кнопки Повтор и Отмена.
  • 16 - значок Stop.
  • 32 - значок Question.
  • 48 - значок Exclamation.
  • 64 - значок Information.

Комментарии

Возвращает целое значение, с помощью которого можно узнать, какая кнопка быля нажата пользователем. Возможные значения:

Пример

var WshShell = WScript.CreateObject("WScript.Shell");
WScript.Echo( WshShell.Popup ("Текст сообщения", 7, "Текст заголовка", 4+16) );

RegDelete()

Метод RegDelete() удаляет из реестра заданный параметр или раздел целиком.

Синтаксис

WshShell.RegDelete( Name )

Параметры

Name
Строка, наименование параметра или раздела.

Комментарии

Если "Name" оканчивается символом "\", метод удаляет ключ целиком, в противном случае удаляется параметр. Параметр "Name" должен начинаться с одного из корневых ключей:

Пример

var WshShell = WScript.CreateObject("WScript.Shell");
WshShell.RegWrite ("HKCU\\NewKeyS\\","Value");
WshShell.RegWrite ("HKEY_CURRENT_USER\\NewKeyS\\Param","Value","REG_SZ");
WScript.Echo ( WshShell.RegRead("HKEY_CURRENT_USER\\NewKeyS\\Param") + '\n' +
               WshShell.RegRead("HKEY_CURRENT_USER\\NewKeyS\\") );
WshShell.RegDelete ("HKEY_CURRENT_USER\\NewKeyS\\Param");
WshShell.RegDelete ("HKEY_CURRENT_USER\\NewKeyS\\");

RegRead()

Метод RegRead() читает из реестра заданный параметр или значение по умолчанию для раздела.

Синтаксис

WshShell.RegRead( Name )

Параметры

Name
Строка, наименование параметра или раздела.

Комментарии

Если "Name" оканчивается символом "\", метод считывает значение по умолчанию для раздела, в противном случае считывается параметр. Параметр "Name" должен начинаться с одного из корневых ключей:

Пример

var WshShell = WScript.CreateObject("WScript.Shell");
WshShell.RegWrite ("HKCU\\NewKeyS\\","Value");
WshShell.RegWrite ("HKEY_CURRENT_USER\\NewKeyS\\Param","Value","REG_SZ");
WScript.Echo ( WshShell.RegRead("HKEY_CURRENT_USER\\NewKeyS\\Param") + '\n' +
               WshShell.RegRead("HKEY_CURRENT_USER\\NewKeyS\\") );
WshShell.RegDelete ("HKEY_CURRENT_USER\\NewKeyS\\Param");
WshShell.RegDelete ("HKEY_CURRENT_USER\\NewKeyS\\");

RegWrite()

Метод RegWrite() записываает в реестр заданный параметр или раздел.

Синтаксис

WshShell.RegWrite( Name, Value, Type )

Параметры

Name
Строка, наименование параметра или раздела.
Value
Значение параметра или значение для раздела по умолчанию.
Type
Необязательный, тип значения. Возможные значения:
  • REG_SZ - Строка
  • REG_DWORD - Число
  • REG_BINARY - Массив чисел
  • REG_EXPAND_SZ - Строка расширяемая, например,"%windir%\\calc.exe"
  • REG_MULTI_SZ - Массив строк

Комментарии

Если "Name" оканчивается символом "\", метод записывает раздел, в противном случае записывается параметр. Параметр "Name" должен начинаться с одного из корневых ключей:

Пример

var WshShell = WScript.CreateObject("WScript.Shell");
WshShell.RegWrite ("HKCU\\NewKeyS\\","Value");
WshShell.RegWrite ("HKEY_CURRENT_USER\\NewKeyS\\Param","Value","REG_SZ");
WScript.Echo ( WshShell.RegRead("HKEY_CURRENT_USER\\NewKeyS\\Param") + '\n' +
               WshShell.RegRead("HKEY_CURRENT_USER\\NewKeyS\\") );
WshShell.RegDelete ("HKEY_CURRENT_USER\\NewKeyS\\Param");
WshShell.RegDelete ("HKEY_CURRENT_USER\\NewKeyS\\");

Run()

Метод Run() создаёт новый независимый процесс, который запускает заданное приложение.

Синтаксис

WshShell.Run( Command, WindowStyle, WaitOnReturn )

Параметры

Command
Строка, командная строка запуска приложения.
WindowStyle
Необязательный, число. Определяет вид окна запускаемого приложения. Некоторые возможные значения:
  • 0 - Не отображает окно.
  • 1 - Активизирует и отображает окно.
  • 2 - Активизирует окно и отображает его в свёрнутом виде.
  • 3 - Активизирует окно и отображает его в максимизированном виде.
  • 4 - Отображает окно в его последнем виде (размер и положение). Активное окно остается активным.
  • 5 - Активизирует окно и отображает его в текущем размере и позиции.
  • 6 - Сводит к минимуму указанное окно и активирует следующее окно верхнего уровня в Z порядке.
  • 7 - Отображает окно в минимальном виде. Активное окно остается активным.
  • 8 - Отображает окно в его текущем состоянии. Активное окно остается активным.
  • 9 - Активизирует и отображает окно. Если окно свернуто или развернуто, система восстанавливает его исходный размер и положение. Приложение должно указывать этот флаг при восстановлении свернутого окна.
WaitOnReturn
Необязательный, булево (число). true - сценарий возобновит работу только после завершения вызванного процесса. false (по умолчанию) - управление передаётся сразу обратно в сценарий.

Комментарии

Если параметр "WaitOnReturn" установлен в true, метод возвращает код выхода вызванного приложения. Иначе метод всегда возвращает ноль.

Пример

var WshShell = WScript.CreateObject("WScript.Shell");
WshShell.Run ('explorer "C:\Program Files"');

Другой пример:

var WshShell = WScript.CreateObject("WScript.Shell")
var RetCode = WshShell.Run("notepad", 1, True)
WScript.Echo ( "Обработка завершена! Код возврата - " & RetCode );

SendKeys()

Метод SendKeys() посылает одно или несколько нажатий клавиш в активное окно (имитация набора на клавиатуре).

Синтаксис

WshShell.SendKeys( String )

Параметры

String
Строка, перечень клавиш в специальном формате.

Комментарии

Каждая клавиша задаётся своим символом. Например, чтобы задать нажатие друг за другом клавиш А, Б и В, нужно указать в качестве параметра строку "АБВ". Некоторые специальные символы следует всегда задавать заключёнными в фигурные скобки. Перечень таких символов:

{+} {^} {%} {~} {(} {)} {[} {]} {{} {}}

Задание неотображаемых символов и специальных клавиш:

КлючАргумент
BACKSPACE {BACKSPACE}, {BS}, или {BKSP}
BREAK {BREAK}
CAPS LOCK {CAPSLOCK}
DEL или DELETE {DELETE} или {DEL}
DOWN ARROW {DOWN}
END {END}
ENTER {ENTER} или ~
ESC {ESC}
HELP {HELP}
HOME {HOME}
INS или INSERT {INSERT} или {INS}
LEFT ARROW {LEFT}
NUM LOCK {NUMLOCK}
PAGE DOWN {PGDN}
PAGE UP {PGUP}
PRINT SCREEN {PRTSC}
RIGHT ARROW {RIGHT}
SCROLL LOCK {SCROLLLOCK}
TAB {TAB}
UP ARROW {UP}
F1 {F1}
F2 {F2}
F3 {F3}
F4 {F4}
F5 {F5}
F6 {F6}
F7 {F7}
F8 {F8}
F9 {F9}
F10 {F10}
F11 {F11}
F12 {F12}
F13 {F13}
F14 {F14}
F15 {F15}
F16 {F16}

Для отправки символов, которые состоят из клавиши в сочетании с SHIFT, CTRL или ALT, создайте составной строковый аргумент, представляющий комбинацию клавиш.

КлючСпециальные символы
SHIFT +
CTRL ^
ALT %

При использовании таким образом, эти специальные символы не заключаются в пару фигурных скобок.
Например, для отправки сочетания клавиш Ctrl + X аргумент будет ^ X. При использовании специальных символов допустимо использовать группировки. Так, +(GH) отправит знак G при нажатой клавише SHIFT, а затем знак H при нажатой клавише SHIFT. А + GH отправит знак G при нажатой клавише SHIFT, а затем знак H, но уже без нажатой клавише SHIFT.

Для не специальных символов можно указывать количество повторений. Так, {х 10} передаст нажатие клавиши x подряд 10 раз. Наличие пробела между символом и количеством повторений обязательно.

Можно отправить "х" в десять раз, но нельзя сделать то же самое для составных символов, например, "Ctrl + X" использую предыдущий шаблон.

Нельзя отправить ключ PRINT SCREEN {PRTSC} к приложению.

Пример

var WshShell = WScript.CreateObject("WScript.Shell");
WshShell.SendKeys {"^{ESC}"}