Книга: Windows Script Host для Windows 2000/XP

Переключение между приложениями, имитация нажатий клавиш

Переключение между приложениями, имитация нажатий клавиш

Производить переключение между окнами нескольких запущенных приложений позволяет метод AppActivate объекта WshScript. В качестве аргумента этого метода нужно указывать либо заголовок активизируемого окна, либо программный идентификатор (PID) процесса, который запущен в этом окне. Предпочтительным является использование PID, который можно получить с помощью свойства ProcessID объекта WshScriptExec, соответствующего активизируемому приложению. Недостатки применения в методе AppActivate заголовка окна:

? при написании сценария необходимо знать точное название заголовка;

? само приложение может изменить текст в заголовке окна;

? в случае нескольких окон с одинаковыми заголовками AppActivate всегда будет активизировать один и тот же экземпляр, доступ к другим окнам получить не удастся.

Активизировав то или иное окно, в котором выполняется приложение Windows, можно из сценария сымитировать нажатия клавиш в этом окне. Для этого используется метод SendKeys объекта WshShell (подробное описание этого метода приведено в главе 1).

Замечание

Для нормальной работы метода 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

Листинг 2.30. Запуск двух приложений и обмен данными между ними (JScript)

/*******************************************************************/
/* Имя: Run&ExecWinApp.js                                          */
/* Язык: JScript                                                   */
/* Описание: Запуск двух приложений и обмен данными между ними     */
/*******************************************************************/
var WshShell, theCalculator;  //Объявляем переменные
//Создаем объект WshShell
WshShell = WScript.CreateObject("WScript.Shell");
WScript.Echo("Запускаем калькулятор иn считаем 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.

Листинг 2.31. Запуск двух приложений и обмен данными между ними (VBScript)

'*******************************************************************
' Имя: Run&ExecWinApp.vbs
' Язык: VBScript
' Описание: Запуск двух приложений и обмен данными между ними
'*******************************************************************
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"
'*************  Конец *********************************************
 

Оглавление книги


Генерация: 1.754. Запросов К БД/Cache: 3 / 1
поделиться
Вверх Вниз