|
Вопрос по лекции 7, где рассматривается взаимодействие со сторонними программами, в том числе эмуляция нажатия кнопок клавиатуры WshShell.SendKeys. Вопрос в том что во время автоматизации может потребоваться не нажатие клавиатуры, а нажатие кнопок в сообщениях этих программ. Можно вытащить информацию о объекте (кнопке) скажем с помощью AutoIt Info, или ориентироваться скажем на текст на кнопке..., но как на эту кнопку нажать? (без обхода по клавиатуре) |
Сценарии WSH как XML-документы. Схема WS XML
Примеры сценариев с разметкой XML
Приведем примеры сценариев, иллюстрирующие основные свойства WS-файлов.
Несколько заданий в одном файле
Каждое отдельное задание в WS-файле должно находиться внутри элементов <job> и </job>. В свою очередь, все элементы <job> являются дочерними элементами контейнера <package>.
В качестве примера рассмотрим сценарий multijob.wsf, приведенный в листинге 9.7. Здесь описываются два задания с идентификаторами "VBS" (сценарий на языке VBScript) и "JS" (сценарий на языке JScript).
<package>
<job id="VBS">
<!-- Описываем первое задание (id="VBS") -->
<runtime>
<description>
Имя: multijob.wsf
Описание: Первое задание из multijob.wsf
</description>
</runtime>
<script language="VBScript">
WScript.Echo "Первое задание (VBScript)"
</script>
</job>
<job id="JS">
<!-- Описываем второе задание (id="JS") -->
<runtime>
<description>
Имя: multijob.wsf
Описание: Второе задание из multijob.wsf
</description>
</runtime>
<script language="JScript">
WScript.Echo("Второе задание (JScript)");
</script>
</job>
</package>
Листинг
9.7.
Файл multijob.wsf
Для того чтобы выполнить первое задание сценария multijob.wsf, которое выведет на экран строку "Первое задание (VBScript)", нужно выполнить одну из следующих команд:
cscript //job:"VBS" multijob.wsf cscript multijob.wsf wscript //job:"VBS" multijob.wsf wscript multijob.wsf
Для запуска второго задания, выводящего на экран строку "Второе задание (JScript)", нужно явно указывать идентификатор этого задания, поэтому используется одна из двух команд:
cscript //job:"JS" multijob.wsf wscript //job:"JS" multijob.wsf
Использование констант внешних объектов
Для того чтобы в сценарии обращаться по имени к константам, определенным во внешних объектах, не создавая экземпляров самих объектов, необходимо сначала получить ссылку на эти объекты с помощью элемента <reference>.
В листинге 9.8 приведен сценарий refer.wsf, в котором с помощью элемента <reference> производится доступ к трем константам объекта FileSystemObject ( ForReading, ForWriting и ForAppending ), которые определяют режим работы из сценария с внешним текстовым файлом. В результате выполнения сценария refer.wsf на экран выведется диалоговое окно с информацией о значениях констант объекта FileSystemObject.
<job id="Example"> <runtime> <description> Имя: refer.wsf Описание: Использование констант внешних объектов </description> </runtime> <!-- Получаем ссылку на объект FileSystemObject --> <reference object="Scripting.FileSystemObject"/> <script language="JScript"> var s; s="Значения констант объекта FileSystemObject:\n\n"; //Получаем значение константы ForReading s+="ForReading="+ForReading+"\n"; //Получаем значение константы ForWriting s+="ForWriting="+ForWriting+"\n"; //Получаем значение константы ForAppending s+="ForAppending="+ForAppending; //Выводим полученные строки на экран WScript.Echo(s); </script> </job>Листинг 9.8. Использование в сценарии констант внешних объектов (файл refer.wsf)
Подключение внешних файлов
К WS-файлу можно подключать "обычные" JScript- или VBScript-сценарии, которые находятся во внешних файлах. Для этого нужно указать путь к этому внешнему файлу в атрибуте src элемента <script>.
Для примера создадим файл inc.js, содержащий строку
WScript.Echo("Здесь выполняется сценарий inc.js");и файл main.wsf, содержание которого приведено в листинге 9.9.
<job id="Example">
<runtime>
<description>
Имя: main.wsf
Описание: Подключение сценария, находящегося во внешнем файле
</description>
</runtime>
<!-- Подключаем сценарий из файла inc.js -->
<script language="JScript" src="inc.js"/>
<!-- Определяем основной сценарий -->
<script language="JScript">
WScript.Echo("Здесь выполняется основной сценарий");
</script>
</job>
Листинг
9.9.
Подключение внешнего сценария (файл main.wsf)
Если запустить main.wsf с помощью cscript.exe, то на экран выведутся две строки:
Здесь выполняется сценарий inc.js Здесь выполняется основной сценарий
Различные языки внутри одного задания
Ни в WSH, ни в JScript нет метода или функции, которые позволяли бы в графическом режиме создать диалоговое окно для ввода текста. Однако в языке VBScript имеется функция InputBox, предназначенная как раз для этой цели; используя разметку XML, мы можем легко использовать эту функцию в сценариях JScript. Соответствующий пример приведен в сценарии multilang.wsf (листинг 9.10).
Сначала в этом сценарии на языке VBScript описывается функция InputName, которая возвращает строку, введенную с помощью функции InputBox:
<script language="VBScript">
Function InputName
InputName = InputBox("Введите Ваше имя:", "Окно ввода VBScript")
End Function
</script>Затем в следующем разделе <script> приводится JScript-сценарий, в котором происходит вызов функции InputName и сохранение возвращаемого ею значения в переменной s:
var s;
s = InputName();Значение полученной таким образом переменной s выводится затем на экран:
WScript.Echo("Здравствуйте, "+s+"!");<job id="Example">
<runtime>
<description>
Имя: multilang.wsf
Описание: Использование функции InputBox в JScript-сценарии
</description>
</runtime>
<script language="VBScript">
Function InputName ' Описываем функцию на языке VBScript
' Вводим имя в диалоговом окне
InputName = InputBox("Введите Ваше имя:", "Окно ввода VBScript")
End Function
</script>
<script language="JScript">
var s;
s = InputName(); //Вызываем функцию InputName
//Выводим значение переменной s на экран
WScript.Echo("Здравствуйте, "+s+"!");
</script>
</job>
Листинг
9.10 .
пользование различных языков внутри одного задания (файл multilang.wsf)