Скриптовый язык AutoIT
Содержание
Скриптовый язык AutoIT
Скриптовый язык 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.
Объекты консольного приложения
Выводить текст на консоль, осуществлять ввод символов, а так же совершать любые иные действия с консолью можно лишь ассоциировав с ней некие системные сущности (объекты), посредством которых можно обеспечивать обмен данными. Каждая консоль состоит из следующих основных объектов:
- [единственный] входной буфер — область данных (события/сигналы/данные) для ввода (передачи на консоль);
- [несколько] экранный выходной буфер — область данных (символы/атрибуты) для вывода (отображения на экране);
- Окно консоли — область экрана, отображающая часть выходного буфера;
- Текущая позиция курсора — маркера вывода, обозначающий текущую позицию вывода;
Стандартные потоки (дескрипторы консоли)
На программном уровне для ввода/вывода информации консольные приложения используют три основных стандартных устройства ввода-вывода:
Наименование | Назначение |
---|---|
Стандартный ввод ( stdin ) | Поток данных, идущих в программу. |
Стандартный вывод ( stdout ) | Поток данных, идущих из программы. |
Стандартная ошибка ( stderr ) | Поток сообщений об ошибках, идущих из программы. |
Для кода любого консольного приложения стандартные потоки доступны через дескрипторы и используют последние для того, чтобы обратиться к стандартному вводу (буферу ввода данных) и стандартному выводу (экранным буферам) собственной консоли. Хотя этими потоками консольное приложение не ограничено, никто не запрещает ему открывать любые файлы, использовать сетевые соединения и совершать иные действия, доступные в выполняющей их среде.
Традиционно, со стандартным вводом ассоциирована клавиатура, а со стандартным выводом/ошибкой ассоциирован монитор (экран), таким образом вывод печатных символов в STDOUT и STDERR приводит к появлению этих символов на устройстве вывода и к получению их пользователем. В дополнение, потоки могут быть переопределены (перенаправлены) и на другие логические устройства (файл, ввод/вывод другой программы и прочее). Поэтому определение консольного приложения может быть расширено:
Тем не менее возникает резонный вопрос: обязательно ли наличие окна консоли у консольного приложения? Ведь, теоретически, консольные программы могут обходиться и без классического ввода (с клавиатуры) и вывода (в окно, на экран), поскольку объекты stdin и stdout могут быть связаны с файлами, потоками ввода/вывода других программ или иными объектами операционной системы? Тем не менее, стандартный сценарий использования консольного приложения в Windows подразумевает создание отдельного окна консоли.
В ходе запуска консольного приложения, система генерирует вышеперечисленные дескрипторы для вновь создаваемого процесса консоли. Процесс консольного приложения обычно использует функции GetStdHandle , CreateFile , CreateConsoleScreenBuffer для того, чтобы открыть один из вышеописанных дескрипторов. Функция GetStdHandle обеспечивает механизм получения кодом приложения дескрипторов стандартного ввода, стандартного вывода и стандартной ошибки, связываемых с процессом в момент создания. В случае необходимости имеется возможность переназначить стандартные дескрипторы через функцию SetStdHandle , изменяющую дескрипторы, связанные с STDIN , STDOUT или STDERR .
Стандартные дескрипторы родительского процесса всегда наследуются всеми создаваемыми дочерними процессами, поэтому вызовы функции GetStdHandle дочерними процессами возвращают переназначенный дескриптор. По этой причине, в зависимости от действий родительского процесса, дескриптор, возвращенный функцией GetStdHandle , может сослаться на что-либо, отличное от привычного нам консольного ввода-вывода. К примеру, родительский процесс может при помощи SetStdHandle изменить дескриптор какого-либо потока (например STDIN ) перед созданием дочернего процесса. Затем, когда созданный дочерний процесс у себя в коде вызовет функцию GetStdHandle , он получает дескриптор переназначенного канала. Этим обеспечивается механизм управления родительским процессом стандартными дескрипторами дочернего процесса.
Буфер ввода
Каждое консольное приложение имеет буфер вводимых данных:
В момент, когда окно консольного приложения имеет фокус клавиатуры (является активным), консоль оформляет каждое событие ввода (типа нажатия/отпускания клавиши, перемещение указателя мыши или щелчка кнопки мыши) в качестве данных, которые помещаются в буфер вводимых данных консоли. Что такое эти самые данные? Запись данных о вводе ― структура Windows, содержащая в себе информацию о деталях события: тип, источник (клавиатура, мышь, размеры окна, фокус, меню) и прочих. Структура имеет внутренний тип INPUT_RECORD и представляет собой следующее:
Инструменты в поставке
После установки AutoIt вам будут доступны следующие основные инструменты:
- утилита Aut2exe.exe для создания исполняемых exe-модулей; позволяет компилировать скрипты как консольные и как GUI-приложения;
- утилита AU3Info.exe для отслеживания различных характеристик окон под курсором мыши, важный инструмент написания скриптов для управления окнами;
- AutoIt.chm — основной файл документации (англ.), использующий файлы AutoIt3.chm и UDFs3.chm; документация обширна и подробна;
- в каталоге Include содержится свыше 80 готовых скриптов для подключения их директивой #include; это библиотеки пользовательских функций (UDF — User Defined Function), созданных энтузиастами AutoIt, которые можно использовать в любом скрипте; все эти функции документированы в файле справки, таких функций более двухсот пятидесяти;
- в каталоге Examples содержится свыше двух тысяч примеров скриптов; подавляющее большинство из них является составной частью файла справки (каталог ExamplesHelpfile);
- для версий AutoIt, более ранних, чем версия на момент написания данной статьи, работает утилита Exe2Aut.exe для обратной декомпиляции ранее откомпилированных скриптов (на декомпиляцию может быть установлен пароль);
- версии AutoIt, более ранние, чем версия на момент написания данной статьи, поддерживают версии Windows 9x.
Объекты консольного приложения
Выводить текст на консоль, осуществлять ввод символов, а так же совершать любые иные действия с консолью можно лишь ассоциировав с ней некие системные сущности (объекты), посредством которых можно обеспечивать обмен данными. Каждая консоль состоит из следующих основных объектов:
- [единственный] входной буфер — область данных (события/сигналы/данные) для ввода (передачи на консоль);
- [несколько] экранный выходной буфер — область данных (символы/атрибуты) для вывода (отображения на экране);
- Окно консоли — область экрана, отображающая часть выходного буфера;
- Текущая позиция курсора — маркера вывода, обозначающий текущую позицию вывода;
Стандартные потоки (дескрипторы консоли)
На программном уровне для ввода/вывода информации консольные приложения используют три основных стандартных устройства ввода-вывода:
Наименование | Назначение |
---|---|
Стандартный ввод ( stdin ) | Поток данных, идущих в программу. |
Стандартный вывод ( stdout ) | Поток данных, идущих из программы. |
Стандартная ошибка ( stderr ) | Поток сообщений об ошибках, идущих из программы. |
Для кода любого консольного приложения стандартные потоки доступны через дескрипторы и используют последние для того, чтобы обратиться к стандартному вводу (буферу ввода данных) и стандартному выводу (экранным буферам) собственной консоли. Хотя этими потоками консольное приложение не ограничено, никто не запрещает ему открывать любые файлы, использовать сетевые соединения и совершать иные действия, доступные в выполняющей их среде.
Традиционно, со стандартным вводом ассоциирована клавиатура, а со стандартным выводом/ошибкой ассоциирован монитор (экран), таким образом вывод печатных символов в STDOUT и STDERR приводит к появлению этих символов на устройстве вывода и к получению их пользователем. В дополнение, потоки могут быть переопределены (перенаправлены) и на другие логические устройства (файл, ввод/вывод другой программы и прочее). Поэтому определение консольного приложения может быть расширено:
Тем не менее возникает резонный вопрос: обязательно ли наличие окна консоли у консольного приложения? Ведь, теоретически, консольные программы могут обходиться и без классического ввода (с клавиатуры) и вывода (в окно, на экран), поскольку объекты stdin и stdout могут быть связаны с файлами, потоками ввода/вывода других программ или иными объектами операционной системы? Тем не менее, стандартный сценарий использования консольного приложения в Windows подразумевает создание отдельного окна консоли.
В ходе запуска консольного приложения, система генерирует вышеперечисленные дескрипторы для вновь создаваемого процесса консоли. Процесс консольного приложения обычно использует функции GetStdHandle , CreateFile , CreateConsoleScreenBuffer для того, чтобы открыть один из вышеописанных дескрипторов. Функция GetStdHandle обеспечивает механизм получения кодом приложения дескрипторов стандартного ввода, стандартного вывода и стандартной ошибки, связываемых с процессом в момент создания. В случае необходимости имеется возможность переназначить стандартные дескрипторы через функцию SetStdHandle , изменяющую дескрипторы, связанные с STDIN , STDOUT или STDERR .
Стандартные дескрипторы родительского процесса всегда наследуются всеми создаваемыми дочерними процессами, поэтому вызовы функции GetStdHandle дочерними процессами возвращают переназначенный дескриптор. По этой причине, в зависимости от действий родительского процесса, дескриптор, возвращенный функцией GetStdHandle , может сослаться на что-либо, отличное от привычного нам консольного ввода-вывода. К примеру, родительский процесс может при помощи SetStdHandle изменить дескриптор какого-либо потока (например STDIN ) перед созданием дочернего процесса. Затем, когда созданный дочерний процесс у себя в коде вызовет функцию GetStdHandle , он получает дескриптор переназначенного канала. Этим обеспечивается механизм управления родительским процессом стандартными дескрипторами дочернего процесса.
Буфер ввода
Каждое консольное приложение имеет буфер вводимых данных:
В момент, когда окно консольного приложения имеет фокус клавиатуры (является активным), консоль оформляет каждое событие ввода (типа нажатия/отпускания клавиши, перемещение указателя мыши или щелчка кнопки мыши) в качестве данных, которые помещаются в буфер вводимых данных консоли. Что такое эти самые данные? Запись данных о вводе ― структура Windows, содержащая в себе информацию о деталях события: тип, источник (клавиатура, мышь, размеры окна, фокус, меню) и прочих. Структура имеет внутренний тип INPUT_RECORD и представляет собой следующее:
Получение помощи¶
Для быстрого получения информации о любой функции или операторе Python служит встроенная функция help . Это особенно удобно при использовании командной строки интерпретатора. К примеру, выполните help(print) – это покажет справку по функции print , которая используется для вывода на экран.
Для выхода из справки нажмите q .
Аналогичным образом можно получить информацию почти о чём угодно в Python. При помощи функции help() можно даже получить описание самой функции help !
Если вас интересует информация об операторах, как например, return , их необходимо указывать в кавычках (например, help(‘return’) ), чтобы Python понял, чего мы хотим.