Обучение - Автоматизация установки WinZip

Этот урок объясняет, как автоматизировать установку WinZip 9 SR-1. Предполагается, что вы уже знакомы с созданием и запуском AutoIt скриптов и используете AutoIt v3 Window Info для чтения заголовков и текстов окна, как показано в предыдущих уроках Привет мир! и Автоматизация блокнота.


Установка WinZip состоит примерно из 10 диалоговых окон, в которых вы должны кликать кнопку (обычно Next) для продолжения установки. Мы собираемся написать скрипт, который просто ждет, пока эти диалоговые окна появятся, чтобы в дальнейшем нажимать на соответствующие кнопки. Как обычно в таких типах установки заголовок окна каждого диалога имеет один и тот же текст (WinZip Setup), поэтому мы должны использовать текст окна, чтобы различать окна. Скриншоты каждого диалога предоставлены, и вы можете кликнуть на картинке, чтобы посмотреть результаты утилиты AutoIt v3 Window Info для этого диалога.


Сначала создайте каталог, из которого мы будем выполнять установку WinZip и запускать наш скрипт. Скопируйте в этот каталог инсталлятор WinZip и создайте пустой скрипт с именем winzipinstall.au3.


Сейчас мы выполняем установку вручную и пишем скрипт по ходу дела. Строки автоматизации для каждого диалогового окна будут показаны ниже под каждым скрином (не забывайте кликать на скрине, чтобы посмотреть результаты утилиты AutoIt v3 Window Info). Вы также можете посмотреть на готовый скрипт для справки.


Первая строка скрипта легка, мы хотим запустить инсталлятор winzip90.exe. Итак первая строка:

Run("winzip90.exe")


Первое диалоговое окно будет временным окном:

Мы должны ожидать это временное окно, пока оно не станет активным, а далее мы должны эмулировать нажатие клавиши ALT-s, чтобы кликнуть кнопку Setup. В итоге строки скрипта таковы:

WinWaitActive("WinZip® 9.0 SR-1 Setup", "&Setup")
Send("!s")

(Не забывайте нажимать на картинку, чтобы посмотреть результаты утилиты AutoIt v3 Window Info, это особенно важно, поскольку заголовок содержит специальный символ ®, который трудно было бы ввести).


Появится следующее диалоговое окно для указания каталога установки:

Мы должны ожидать это окно, пока оно не станет активным и далее нажать ENTER для продолжения установки в указанный каталог. Строки скрипта следующие:

WinWaitActive("WinZip Setup", "into the following folder")
Send("{ENTER}")


Появится следующее диалоговое окно WinZip с характеристиками:

Обратите внимание, что это окно имеет точно такой же заголовок как предыдущий WinZip Setup - фактически почти все диалоговые окна этапа установки имеют этот заголовок! Чтобы различать эти окна мы будем использовать тексты окна - в каждом диалоговом окне попробуйте выбрать самый уникальный текст, который вы можете. В данном случае я выбрал WinZip features include. После появления окна нам необходимо нажать ALT-n:

WinWaitActive("WinZip Setup", "WinZip features include")
Send("!n")


Появится следующее диалоговое окно Лицензионного соглашения:

Ожидаем это окно, пока оно не станет активным, а далее эмулируем нажатие клавиши ALT-y, чтобы принять условия лицензионного соглашения:

WinWaitActive("License Agreement")
Send("!y")


Установка продолжается аналогичным образом для последующих диалоговых окон. Скрин каждого диалогового окна сопровождается строками необходимыми для его автоматизации.


WinWaitActive("WinZip Setup", "Quick Start Guide")
Send("!n")


WinWaitActive("WinZip Setup", "switch between the two interfaces")
Send("!c")
Send("!n")


WinWaitActive("WinZip Setup", "&Express setup (recommended)")
Send("!e")
Send("!n")


WinWaitActive("WinZip Setup", "WinZip needs to associate itself with your archives")
Send("!n")


Это завершающее диалоговое окно установки. Обратите внимание, что кнопка Finish не имеет клавиши для автоматизации нажатия - к счастью эта кнопка является кнопкой по умолчанию, поэтому мы можем просто нажать ENTER. Если бы это было не так, то нам пришлось бы эмулировать нажатие TAB для перемещения фокуса на нужную кнопку или еще лучше используйте функцию ControlClick.

WinWaitActive("WinZip Setup", "Thank you for installing this evaluation version")
Send("{ENTER}")


После установки WinZip автоматически запускается:

Мы просто ожидаем главное окно WinZip и затем закрываем его с помощью функции WinClose.

WinWaitActive("WinZip (Evaluation Version)")
WinClose("WinZip (Evaluation Version)")


Здесь готовый скрипт - обратите внимание, что я прокомментировал каждое диалоговое окно индивидуально, что облегчает отслеживание и редактирование скрипта в будущем (следующая версия WinZip может немного отличаться).


На этом всё! Запустите скрипт winzipinstaller.au3 и наблюдайте как WinZip будет установлен в течение нескольких секунд! Методы, используемые в этом уроке могут быть использованы для автоматизации установки большинства программ.


В качестве упражнения для читателя, попробуйте повторить скрипт, но вместо функции Send (которая высылает нажатие клавиши активному окну) для клика на кнопке попробуйте использовать функцию ControlClick, которая может быть более надёжна. Вам нужно будет прочитать Элементы управления, чтобы сделать это.