окна:
? при написании сценария необходимо знать точное название заголовка;
? само приложение может изменить текст в заголовке окна;
? в случае нескольких окон с одинаковыми заголовками AppActivate
всегда будет активизировать один и тот же экземпляр, доступ к другим окнам получить не удастся.
Активизировав то или иное окно, в котором выполняется приложение Windows, можно из сценария сымитировать нажатия клавиш в этом окне. Для этого используется метод SendKeys
объекта WshShell
(подробное описание этого метода приведено в
Для нормальной работы метода SendKeys
необходимо, чтобы языком по умолчанию в операционной системе был назначен английский язык.
Рассмотрим пример сценария Run&ExecWinApp.js (листинг 2.30), в котором запускается Калькулятор (calc.exe), и в его окно с помощью SendKeys
последовательно посылаются нажатия клавиш <1>, <+>, <2> и <Enter>:
theCalculator = WshShell.Exec('calc');
WScript.Sleep(1000);
WshShell.AppActivate(theCalculator.ProcessID);
WshShell.SendKeys('1{+}');
WshShell.SendKeys('2');
WshShell.SendKeys('~'); //Клавиша <Enter>
Затем выполнение сценария приостанавливается на 1 секунду, чтобы результат вычислений был виден на экране:
WScript.Sleep(1000);
после чего результат вычислений (символ '3') копируется в буфер с помощью 'нажатия' клавиш <Ctrl>+<C>:
WshShell.SendKeys ('^c');
После этого на экран выводится сообщение о том, что Калькулятор будет закрыт:
WScript.Echo('Закрываем калькулятор');
в результате чего окно Калькулятора теряет фокус. Для того чтобы вновь активизировать это окно, используется метод AppActivate, параметром которого служит PID Калькулятора:
WshShell.AppActivate(theCalculator.ProcessID);
Для того чтобы закрыть окно Калькулятора, в него посылаются нажатия клавиш <Alt> +<F4>:
WshShell.SendKeys('%{F4}');
После закрытия Калькулятора запускается Блокнот (notepad.exe) и в него записываются результаты работы Калькулятора (вставка из буфера вычисленной суммы производится с помощью нажатий <Ctrl>+<V>):
WshShell.Run('notepad');
WScript.Sleep(1000);
WshShell.AppActivate('notepad');
WshShell.SendKeys('l{+}2=');
WshShell.SendKeys('^v');
WshShell.SendKeys(' {(}с{)} Calculator');
В результате в Блокноте отображается текст, показанный на рис. 2.12.

Рис. 2.12. Результат работы сценария Run&ExecWinApp.js
/*******************************************************************/
/* Имя: Run&ExecWinApp.js */
/* Язык: JScript */
/* Описание: Запуск двух приложений и обмен данными между ними */
/*******************************************************************/
var WshShell, theCalculator; //Объявляем переменные
//Создаем объект WshShell
WshShell = WScript.CreateObject('WScript.Shell');
WScript.Echo('Запускаем калькулятор и
считаем 1+2');
//Создаем объект WshScript (запускаем Калькулятор)
theCalculator = WshShell.Exec('calc');
//Приостанавливаем выполнение сценария, для того, чтобы
//окно Калькулятора успело появиться на экране
WScript.Sleep(1000);
//Активизируем окно Калькулятора
WshShell.AppActivate(theCalculator.ProcessID);
//Посылаем нажатия клавиш в окно Калькулятора
WshShell.SendKeys('1{+}');
WshShell.SendKeys('2');
WshShell.SendKeys('~'); //Клавиша <Enter>
WScript.Sleep(1000);
//Копируем результат вычисления в буфер 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');
/************* Конец *********************************************/
Тот же пример, реализованный в виде VBScript-сценария, приведен в листинге 2.31.
'*******************************************************************
' Имя: Run&ExecWinApp.vbs
' Язык: VBScript
' Описание: Запуск двух приложений и обмен данными между ними