Скриптовый язык AutoIt - это бесплатный мощный язык для написания сценариев для Windows 2000, XP, 2003, Vista, Server 2008 (для машин с 32 и 64-разрядным процессором) с упором на автоматизацию GUI, который можно применять для решения широкого спектра задач, начиная от автоматизации рутинных операций и заканчивая созданием сложных приложений. Синтаксис AutoIt — бейсикоподобный, поэтому язык достаточно прост в изучении. Сам AutoIt создан на языке Cи и достаточно нетребователен к ресурсам компьютера. Основной автор и разработчик проекта AutoIt — Jonathan Bennet. Взять язык можно здесь. Подробный протокол развития AutoIt можно увидеть здесь. Русскую справку (подробный файл CHM) можно скачать здесь.
Основные возможности языка: работа со строками, математические функции, регулярные выражения, поддержка Unicode, встроенные макропеременные, содержащие системную информацию "только для чтения"; инструкция #include для подключения библиотек; работа с файловой системой и текстовыми файлами; обработка параметров командной строки; анализ и преобразование типов переменных; имитация пользовательского ввода мышью и клавиатурой в любых приложениях; манипуляция окнами запущенных приложений (получение информации и управление); глобальные перехватчики клавиатуры, запуск процедур по нажатию горячих клавиш; компиляция в исполняемые exe-модули; построение GUI; основные элементы управления, а также пользовательские элементы управления, поставляемые как ActiveX; рисование графических примитивов; работа с треем; стандартные диалоги выбора файла и обзора каталогов; поддержка COM с возможностью обработки событий; вызов экспортируемых функций DLL (например, Win32 API), включая callback; работа с API структурами данных; библиотека AutoItX3.dll — ActiveX компонент, позволяющий использовать некоторые возможности AutoIt на произвольном языке программирования через интерфейсы DLL и ActiveX/COM; работа с сетью (протоколы TCP и UDP, загрузка файлов); мониторинг и запуск процессов; запуск процессов от имени указанной учётной записи; работа с реестром; работа с буфером обмена; проигрывание wav, mp3, avi файлов; поддержка User Account Control (UAC) в Windows Vista. Hello, World!
Файлы скриптов имеют расширение .au3. Запуск осуществляется командой наподобие следующей: <путь>\AutoIt3.exe скрипт.au3
Кроме того, если используется полная установка AutoIt, запуск скриптов производится просто двойным щелчком по файлу скрипта.
Скрипт выше выведет диалоговое окно с приветствием. Первый аргумент функции MsgBox определяет тип сообщения (в данном случае — окно с единственной кнопкой ОК, без дополнительных опций).
Можно исполнить код на языке AutoIt динамически, из командной строки, например: AutoIt3.exe /AutoIt3ExecuteLine "MsgBox(0, 'Hello World!', 'Привет!')"
Следующий пример демонстрирует возможность автоматизации произвольных GUI-приложений: Run("notepad.exe") ; запускаем Блокнот WinWaitActive("Безымянный - Блокнот") ; ожидаем появление окна Блокнота Send("Какой-то текст.") ; посылаем нажатия (имитируем ввод) WinClose("Безымянный - Блокнот") ; посылаем окну команду закрытия ; ожидаем появление окна запроса о сохранении: WinWaitActive("Блокнот", "Текст в файле Безымянный был изменен.") Send("{ESC}") ; посылаем нажатие Escape (имитируем ввод)
Скрипт выше запускает Блокнот, печатает в него текст, посылает окну Блокнота команду закрытия, а затем отказывается от закрытия, посылая нажатие Escape окну запроса о сохранении. Эти приёмы демонстрируют возможность автоматизации произвольных приложений, даже тех, которые не поддерживают опций командной строки или специальных программных средств автоматизации. AutoIt просто имитирует пользовательский ввод. Такие возможности скриптового языка могут стать спасательным кругом для решения многих проблем, например, автоматической инсталляции некоторых приложений.
Следующий пример демонстрирует назначение глобальных горячих клавиш: ; установка глобального перехвата нажатия клавиши Escape: HotKeySet("{ESC}", "Terminate") ; установка глобального перехвата нажатия комбинации клавиш Alt+Shift+1 HotKeySet("+!1", "ShowMessage") ; тело основной программы While 1 Sleep(100) WEnd
; функции Func Terminate() ; по нажатию клавиши Escape Exit 0 ; завершение работы EndFunc
Скрипт выше устанавливает глобальный перехват нажатий Escape и Alt+Shift+1 (после запуска в трее появится иконка скрипта). При нажатии Alt+Shift+1 выдаётся сообщение, а при нажатии Escape скрипт завершает работу (активное окно в момент нажатий не имеет значения — перехват глобальный). Эти приёмы позволяют сильно автоматизировать работу пользователя. На нажатие различных клавиш можно "повесить" запуск приложений или выполнение определённых действий в нужном приложении т.п.
Синтаксис работы с COM-объектами прозрачен, как и в большинстве бейсикоподобных языков: $wsh = ObjCreate("WScript.Shell") ; создание объекта if @error then exit(1) ; проверка ошибки $wsh.popup("сообщение") ; вызов метода
Скрипт выше выдаст окно с текстом "сообщение". Инструменты в поставке
После установки AutoIt вам будут доступны следующие основные инструменты: утилита Aut2exe.exe для создания исполняемых exe-модулей; позволяет компилировать скрипты как консольные и как GUI-приложения; утилита AU3Info.exe для отслеживания различных характеристик окон под курсором мыши, важный инструмент написания скриптов для управления окнами; AutoIt.chm — основной файл документации (англ.), использующий файлы AutoIt3.chm и UDFs3.chm; документация обширна и подробна; в каталоге \Include содержится свыше 80 готовых скриптов для подключения их директивой #include; это библиотеки пользовательских функций (UDF — User Defined Function), созданных энтузиастами AutoIt, которые можно использовать в любом скрипте; все эти функции документированы в файле справки, таких функций более двухсот пятидесяти; в каталоге \Examples содержится свыше двух тысяч примеров скриптов; подавляющее большинство из них является составной частью файла справки (каталог \Examples\Helpfile);
Примечания: для версий AutoIt, более ранних, чем версия на момент написания данной статьи, работает утилита Exe2Aut.exe для обратной декомпиляции ранее откомпилированных скриптов (на декомпиляцию может быть установлен пароль); версии AutoIt, более ранние, чем версия на момент написания данной статьи, поддерживают версии Windows 9x. Другие примеры работы
Следующий пример демонстрирует использование Win32 API и организацию callback (функции обратного вызова), а также использование встроенных возможностей для получения информации об окнах (функции WinGetTitle и WinGetState): ;Создание функции обратного вызова $handle = DLLCallbackRegister('_EnumWindowsProc', 'int', 'hwnd;lparam') ;Вызвать API для перебора окон DllCall('user32.dll', 'int', 'EnumWindows', 'ptr', DllCallbackGetPtr($handle), 'lparam', 10) ;Освободить функцию обратного вызова DllCallbackFree($handle)
Пример выше выведет информацию об открытых и в данный момент видимых окнах в системе, демонстрируя информацию о каждом окне отдельным сообщением. Нажатие кнопки "Отмена" в любой момент останавливает дальнейший перебор окон.