'*******************************************************************
Option Explicit
Dim WshShell, theCalculator ' Объявляем переменные
' Создаем объект WshShell
Set WshShell = WScript.CreateObject('WScript.Shell')
WScript.Echo('Запускаем калькулятор и' & vbCrLf & 'считаем 1+2')
' Создаем объект WshScript (запускаем Калькулятор)
Set theCalculator = WshShell.Exec('calc')
' Приостанавливаем выполнение сценария, для того, чтобы
' окно Калькулятора успело появиться на экране
WScript.Sleep 500
' Активизируем окно Калькулятора
WshShell.AppActivate theCalculator.ProcessID
' Посылаем нажатия клавиш в окно Калькулятора
WshShell.SendKeys '1{+}'
WshShell.SendKeys '2'
WshShell.SendKeys '~' ' Клавиша <Enter>
WScript.Sleep 500
' Копируем результат вычисления в буфер Windows (<Ctrl>+C)
WshShell.SendKeys '^c'
' Выводим сообщение (активное окно меняется)
WScript.Echo 'Закрываем калькулятор'
' Активизируем окно Калькулятора
WshShell.AppActivate theCalculator.ProcessID
' Закрываем окно Калькулятора (<Alt>+<F4>)
WshShell.SendKeys '%{F4}'
WScript.Echo 'Запускаем Блокнот и копируем туда результат'
WshShell.Run 'notepad' ' Запускаем Блокнот
' Приостанавливаем выполнение сценария, для того, чтобы
' окно Блокнота успело появиться на экране
WScript.Sleep 1000
WshShell.AppActivate 'notepad' ' Активизируем окно Блокнота
' Посылаем нажатия клавиш в окно Блокнота
WshShell.SendKeys '1{+}2='
' Вставляем содержимое буфера Windows (<Ctrl>+V)
WshShell.SendKeys '^v'
' Выводим в окно Блокнота оставшуюся информацию
WshShell.SendKeys ' {(}c{)} Calculator'
'************* Конец *********************************************
Запуск независимых консольных приложений и команд DOS
Для запуска независимых, т.е. работающих в отдельном адресном пространстве и использующих свою копию переменных среды, консольных приложений или внешних (представленных исполняемыми файлами на жестком диске) команд DOS используется метод Run
объекта WshShell
. При этом выполнение сценария можно приостановить до окончания работы запущенного приложения, а затем проанализировать код выхода этого приложения (для этого третий параметр метода Run
должен равняться true
). Соответствующие примеры сценариев на языках JScript и VBScript приведены в листингах 2.32 и 2.33 соответственно.
/*******************************************************************/
/* Имя: RunConApp.js */
/* Язык: JScript */
/* Описание: Запуск независимого консольного приложения и */
/* определение его кода выхода */
/*******************************************************************/
var WshShell, Code; //Объявляем переменные
//Создаем объект WshShell
WshShell = WScript.CreateObject('WScript.Shell');
//Запускаем утилиту xcopy с ключом '/?' и ожидаем окончания ее работы
Code=WshShell.Run('xcopy /?',1,true);
//Печатаем полученный код возврата
WScript.Echo('Код возврата: ', Code);
/************* Конец *********************************************/
'*******************************************************************
' Имя: RunConApp.vbs
' Язык: VBScript
' Описание: Запуск независимого консольного приложения и
' определение его кода выхода
'*******************************************************************
Option Explicit
Dim WshShell, Code ' Объявляем переменные
' Создаем объект WshShell
Set WshShell = WScript.CreateObject('WScript.Shell')
' Запускаем утилиту xcopy с ключом '/?' и ожидаем окончания ее работы
Code=WshShell.Run('xcopy /?',1,true)
' Печатаем полученный код возврата
WScript.Echo 'Код возврата: ', Code
'************* Конец *********************************************/
Для выполнения внутренней команды DOS нужно запустить командный интерпретатор (в Windows NT/2000/XP это файл cmd.exe, в WindowsCOMSPEC
.
Для получения значения переменной среды ее имя нужно окружить знаками '%' (например, %COMSPEC%
).
В листингах 2.34 и 2.35 приведены сценарии на языках JScript и VBScript, в которых запускаются внутренние команды COPY /?
(вызов встроенной справки для сору) и DIR %WINDIR%
(вывод содержимого системного каталога Windows).
При этом окно, в котором выполняется команда COPY /?
, не закрывается после завершения этой команды, т.к. при запуске командного интерпретатора был указан ключ /k, а информация, выводимая командой DIR %WINDIR%, перенаправляется в файл windir.txt, после чего командное окно закрывается, т.к. для командного интерпретатора в этом случае был указан ключ /с
.