Вопрос по лекции 7, где рассматривается взаимодействие со сторонними программами, в том числе эмуляция нажатия кнопок клавиатуры WshShell.SendKeys. Вопрос в том что во время автоматизации может потребоваться не нажатие клавиатуры, а нажатие кнопок в сообщениях этих программ. Можно вытащить информацию о объекте (кнопке) скажем с помощью AutoIt Info, или ориентироваться скажем на текст на кнопке..., но как на эту кнопку нажать? (без обхода по клавиатуре) |
Собственная объектная модель WSH
Метод Environment
Параметр strType задает вид переменных среды, которые будут записаны в коллекции WshEnvironment ; возможными значениями этого параметра являются "System" (переменные среды операционной системы), "User" (переменные среды пользователя), "Volatile" (временные переменные) или "Process" (переменные среды текущего командного окна).
В следующем примере (листинг 5.6) мы распечатываем число процессоров, имеющихся в компьютере с операционной системой Windows XP (переменная NUMBER_OF_PROCESSORS ), и тип операционной системы.
'***************************************************************** '* Имя: ShowEnvir.vbs '* Язык: VBScript '* Описание: Получение значений некоторых переменных среды '***************************************************************** Dim WshShell,WshSysEnv ' Создаем объект WshShell Set WshShell = WScript.CreateObject("WScript.Shell") ' Создание коллекции WshEnvironment Set WshSysEnv = WshShell.Environment("SYSTEM") WScript.Echo WshSysEnv("OS") WScript.Echo WshShell.Environment.Item("NUMBER_OF_PROCESSORS") '************* Конец *********************************************Листинг 5.6. Получение значений переменных среды (VBScript)
Метод Run
Параметр intWindowStyle устанавливает вид окна для запускаемого приложения (табл. 5.6).
Параметр | Константа Visual Basic | Описание |
---|---|---|
0 | vbHide | Прячет текущее окно и активизирует другое окно (показывает его и передает ему фокус) |
1 | vbNormalFocus | Активизирует и отображает окно. Если окно было минимизировано или максимизировано, система восстановит его первоначальное положение и размер. Этот флаг должен указываться сценарием во время первого отображения окна |
2 | vbMinimizedFocus | Активизирует окно и отображает его в минимизированном (свернутом) виде |
3 | vbMaximizedFocus | Активизирует окно и отображает его в максимизированном (развернутом) виде |
4 | vbNormalNoFocus | Отображает окно в том виде, в котором оно находилось последний раз. Активное окно при этом остается активным |
5 | Активизирует окно и отображает его в текущем состоянии | |
6 | vbMinimizedNoFocus | Минимизирует заданное окно и активизирует следующее (в Z-порядке) окно |
7 | Отображает окно в свернутом виде. Активное окно при этом остается активным | |
8 | Отображает окно в его текущем состоянии. Активное окно при этом остается активным | |
9 | Активизирует и отображает окно. Если окно было минимизировано или максимизировано, система восстановит его первоначальное положение и размер. Этот флаг должен указываться, если производится восстановление свернутого окна (его нельзя использовать в методе Run ) | |
10 | Устанавливает режим отображения, опирающийся на режим программы, которая запускает приложение |
Необязательный параметр bWaitOnReturn является логической переменной, дающей указание ожидать завершения запущенного процесса. Если этот параметр не указан или установлен в false, то после запуска из сценария нового процесса управление сразу же возвращается обратно в сценарий (не дожидаясь завершения запущенного процесса). Если же bWaitOnReturn установлен в true, то сценарий возобновит работу только после завершения вызванного процесса.
При этом если параметр bWaitOnReturn равен true, то метод Run возвращает код выхода вызванного приложения. Если же bWaitOnReturn равен false или не задан, то метод Run всегда возвращает ноль.
Следующий сценарий (листинг 5.7) печатает код выхода вызванного приложения (Блокнот).
'******************************************************************** '* Имя: RetCode.vbs '* Язык: VBScript '* Описание: Вывод кода выхода запущенного приложения '******************************************************************** ' Создаем объект WshShell Set WshShell = WScript.CreateObject("WScript.Shell") ' Запускаем Блокнот и ожидаем завершения его работы Return = WshShell.Run("notepad " + WScript.ScriptFullName, 1, true) ' Печатаем код возврата WScript.Echo "Код возврата:", Return '************* Конец ***********************************************Листинг 5.7. Вывод кода выхода запущенного приложения
Метод SendKeys
Каждая клавиша задается одним или несколькими символами. Например, Для того чтобы задать нажатие друг за другом букв А, Б и В нужно указать в качестве параметра для SendKeys строку "АБВ": string="АБВ".
Несколько символов имеют в методе SendKeys специальное значение: +, ^, %, ~, (, ). Для того чтобы задать один из этих символов, их нужно заключить в фигурные скобки ( {} ). Например, для задания знака плюс используется {+}. Квадратные скобки ( [] ) хотя и не имеют в методе SendKeys специального смысла, их также нужно заключать в фигурные скобки. Кроме этого, для задания самих фигурных скобок следует использовать следующие конструкции: {{} (левая скобка) и {}} (правая скобка).
Для задания неотображаемых символов, таких как <Enter> или <Tab>, и специальных клавиш в методе SendKeys используются коды, представленные в табл.5.7.
Для задания комбинаций клавиш с <Shift>, <Ctrl> или <Alt>, перед соответствующей клавишей нужно поставить один или несколько кодов из табл. 5.8:
Для того чтобы задать комбинацию клавиш, которую нужно набирать, удерживая нажатыми клавиши <Shift>, <Ctrl> или <Alt>, нужно заключить коды этих клавиш в скобки. Например, если требуется сымитировать нажатие клавиш G и S при нажатой клавише <Shift>, следует использовать последовательность "+(GS)". Для того же, чтобы задать одновременное нажатие клавиш <Shift>+<G>, а затем <S> (уже без <Shift>), используется "+GS".
В методе SendKeys можно задать несколько нажатий подряд одной и той же клавиши. Для этого необходимо в фигурных скобках указать код нужной клавиши, а через пробел — число нажатий. Например, {LEFT 42} означает нажатие клавиши <?> 42 раза подряд; {h 10} означает нажатие клавиши h 10 раз подряд.
В качестве примера использования методов SendKeys и AppActivate приведен сценарий RunCalc.vbs (листинг 5.8), который запускает стандартный калькулятор Windows и выполняет в нем несколько простых арифметических действий.
'***************************************************************** '* Имя: RunCalc.vbs '* Язык: VBScript '* Описание: Активизация приложения с помощью имени окна '***************************************************************** Dim WshShell ' Создаем объект WshShell Set WshShell=WScript.CreateObject("WScript.Shell") ' Запускаем Калькулятор WshShell.Run "calc" ' Приостанавливаем сценарий на 1 секунду WScript.Sleep 1000 ' Активизируем Калькулятор WshShell.AppActivate "Calculator" ' Приостановка сценария на 0,1 секунды WScript.Sleep(100) ' Посылаем нажатия клавиш в Калькулятор WshShell.SendKeys "1{+}" WScript.Sleep 500 WshShell.SendKeys "2" WScript.Sleep 500 WshShell.SendKeys "~" WScript.Sleep 2500 '************* Конец *********************************************Листинг 5.8. Стандартный калькулятор Windows