Опубликован: 12.01.2008 | Уровень: специалист | Доступ: платный | ВУЗ: Мордовский государственный университет имени Н.П. Огарева
Лекция 5:

Собственная объектная модель WSH

< Лекция 4 || Лекция 5: 1234 || Лекция 6 >
Метод 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).

Таблица 5.6. Типы окна (intWindowStyle)
Параметр Константа 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.

Таблица 5.7. Коды специальных клавишей для SendKeys
Названия клавиши Код Названия клавиши Код
<Backspace> {BACKSPACE}, {BS} или {BKSP} < \to > {RIGHT}
<Break> {BREAK} <F1> {F1}
<Caps Lock> {CAPSLOCK} <F2> {F2}
<Del> или <Delete> {DELETE} или {DEL} <F3> {F3}
<End> {END} <F4> {F4}
<Enter> {ENTER} или ~ <F5> {F5}
<Esc> {ESC} <F6> {F6}
<Home> {HOME} <F7> {F7}
<Ins> или <Insert> {INSERT} или {INS} <F8> {F8}
<Num Lock> {NUMLOCK} <F9> {F9}
<Page Down> {PGDN} <F10> {F10}
<Page Up> {PGUP} <F11> {F11}
<Print Screen> {PRTSC} <F12> {F12}
<Scroll Lock> {SCROLLLOCK} <F13> {F13}
<Tab> {TAB} <F14> {F14}
< \uparrow > {UP} <F15> {F15}
< \gets > {LEFT} <F16> {F16}
< \downarrow > {DOWN}

Для задания комбинаций клавиш с <Shift>, <Ctrl> или <Alt>, перед соответствующей клавишей нужно поставить один или несколько кодов из табл. 5.8:

Таблица 5.8. Коды клавиш <Shift>, <Ctrl> и <Alt>
Клавиша Код
<Shift> +
<Ctrl> ^
<Alt> %

Для того чтобы задать комбинацию клавиш, которую нужно набирать, удерживая нажатыми клавиши <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
< Лекция 4 || Лекция 5: 1234 || Лекция 6 >
Валентина Тюрина
Валентина Тюрина

Вопрос по лекции 7, где рассматривается взаимодействие со сторонними программами, в том числе эмуляция нажатия кнопок клавиатуры WshShell.SendKeys.

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

Можно вытащить информацию о объекте (кнопке) скажем с помощью AutoIt Info, или ориентироваться скажем на текст на кнопке..., но как на эту кнопку нажать? (без обхода по клавиатуре)

Александр Тагильцев
Александр Тагильцев

Где проводится профессиональная переподготовка "Системное администрирование Windows"? Что-то я не совсем понял как проводится обучение.