AutoIt

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 21:37, 8 июня 2016.
AutoIt
fraimed
Спроектировано Джонатан Беннет и AutoIt Team
Портал: http://www.autoitscript.com
Влияние
AutoHotkey

AutoIt — (произносится [ ˈɔː.təʊ ɪt ] )свободно распространяемый язык программирования для автоматизации выполнения задач в Microsoft Windows.

В ранних версиях программа преимущественно использовалась для создания скриптов автоматизации (иногда называемых макросами) для программ Microsoft Windows. Такие скрипты полезны для выполнения часто повторяющихся задач, таких как инсталляция идентичных наборов программ на большое количество компьютеров. В более поздних версиях AutoIt улучшился дизайн языка и возросла общая функциональность, что приблизило AutoIt к языкам общего назначения.

История создания

AutoIt появился в конце 1998 года, как Си-программа для автоматизации нажатия клавиш. В январе 1999 года команда разработчиков выпустила AutoIt версии v1, который включал в себя следующие команды: Send, Run, RunWait, WinWait, WinWaitClose, WinWaitActive, WinHide, WinActivate, WinClose, WinRestore, Sleep и SetKeyDelay. AutoIt v2 был выпущен в августе того же года и включал первый вариант AutoItX, который предложил DLL / COM контроль. В течение следующих двух лет в язык были добавлены множество новых функций. В мае 2001 года исходный код AutoIt был полностью переписан на C++ и его развитие не останавливается до 2003 года, когда была выпущена первая бета-версия AutoIt v3. Спустя 100 бета-версии разработчики выпустили AutoIt v3 в феврале 2004 года. Февраль 2005 года был ознаменован выпуском AutoIt v3.1.0, в котором была добавила возможность создания графического пользовательского интерфейса (GUI). Эта версия была самымой заметной из всех, она выдвинула AutoIt на первый план в мире сценариев, сделала его конкурентом VisualBasic. AutoIt бесплатен в использовании и имеет сильную и полезную базу сообщества.

Основные достоинства языка

  • Совместимость с Windows XP / 2003 / Vista / 2008 / 7 / 2008 R2 / 8 / 8.1 / 2012
  • Версия для 64-битных систем.
  • Поддержка User Account Control (UAC) в Windows Vista и выше.
  • Поддержка юникода, начиная с версии 3.2.4.0.
  • Запуск консольных приложений и доступ к стандартным потокам ввода-вывода.
  • Запуск программ от имени другого пользователя (функции RunAs).
  • Компиляция скрипта в EXE файл с помощью Aut2Exe.
  • Включение файлов в скомпилированный файл, которые можно извлекать при запуске.
  • Сжатие и защита исполняемого файла от декомпиляции с помощью упаковщика UPX
  • Создание графических интерфейсов GUI, информационных сообщений, форм ввода информации.
  • Вызов функций из динамических библиотек и функций Windows API.
  • Работа с реестром Windows, буфером обмена, файлами (чтение, изменение, копирование, удаление).
  • Работа с объектами COM (component object modelling).
  • Перехват и эмуляция клавиатурных нажатий и кликов мышки.
  • Работа с окнами (особенно стандартными): передвижение, скрытие, отображение, изменение размера, активизация, закрытие и т.д. К окнам можно обращаться по их заголовку, отображаемому тексту, размеру, расположению, классу, по внутренним дескриторам (handle) Win32 API, определяемым с помощью входящей в комплект поставки утилиты Au3Info.
  • Получение информации и взаимодействие с элементами управления (особенно стандартными): поле редактирования, переключатель, список, кнопки, статусная строка и т.д., в т.ч. неактивными.
  • Интернет: чтение HTML кода страниц и скачивание файлов, работа с FTP, отправка E-mail сообщений, работа с базами данных MySQL и SQLite.
  • Работа с протоколами TCP и UDP.
  • Автоматизация работы в браузерах: Internet Explorer, Opera, FireFox.
  • Обычные элементы высокоуровневого языка, такие как работа с циклами.
  • Огромное количество функций для работы с текстом (строками), в т.ч. с регулярными выражениями в стиле Perl (используется библиотека PCRE).
  • Работа со звуком.
  • Выполнение сложных математических расчётов.
  • Простой синтаксис, похожий на BASIC.
  • AutoItX — объединённая версия в виде COM и DLL, позволяющая использовать возможности AutoIt в программах, написанных на других языках.

Интерпретатор AutoIt имеет небольшой размер, и не требует обязательной установки. Для работы достаточно основного файла, а для создания скрипта — любого текстового редактора.

Расширение скриптов и запуск

Файлы скриптов обычно имеют расширение *.au3, что соответствует названию интепретатора, с помощью которого они будут запускаться, а именно, AutoIt3.exe. Пусть мы создали скрипт: script.au3, тогда для его запуска необходимо выполнить следующую команду:

alexey# AutoIt3.exe script.au3

Синтаксис языка

Первая программа

;Выводит стандартное окно с названием «Пример», надписью «Привет, мир!» и кнопкой «ОК».
MsgBox(0,"Пример","Привет, мир!");

Переменные

Переменные создаются с помощью ключевых слов Dim, Local, Global.

Dim $var, $message, $error = "404 Not found"

Условные конструкции

Язык обладает большим количеством различных условных конструкций: If ... Then ... Else ... EndIf:

$var = 10    
If($var > 0) Then  
  MsgBox(0,"","Переменная больше нуля")  
ElseIf($var < 0 ) Then                    ; Можно использовать ElseIf любое количество раз
  MsgBox(0,"","Переменная меньше нуля")  
Else  
  MsgBox(0,"","Переменная равна нулю")  
EndIf

Конструкция "Select ... Case". Применяется для выбора из большого числа вариантов. Если условие справедливо, то выполняются все следующие за ним команды вплоть до следующего выражения Case или EndSelect. Если окажутся справедливыми несколько выражений Case, то будет выполнены команды только первого из них. Пример:

$var = 30  
Select  
  Case $var > 1 AND $var <= 10  
    MsgBox(0, "", "Переменная находится между 1 и 10(включительно)")  
  Case $var > 10 AND $var <= 20  
    MsgBox(0, "", "Переменная находится между 10 и 20(включительно)")  
  Case $var > 20 AND $var <= 30  
    MsgBox(0, "", "Переменная находится между 20 и 30(включительно)")  
  Case $var > 30 AND $var <= 40  
    MsgBox(0, "", "Переменная находится между 30 и 40(включительно)")  
  Case Else  
    MsgBox(0, "", "Переменная больше 40")  
EndSelect

Конструкция "Switch ... Case"

Switch @HOUR              ; @HOUR макрос который даёт нам значение часа на данный момент
  Case 6 To 11  
    $msg = "Доброе утро!"  
  Case 12 To 17  
    $msg = "Добрый день!"  
  Case 18 To 21  
    $msg = "Добрый вечер"  
  Case Else  
    $msg = "Пора спать!"  
EndSwitch        
MsgBox(0, "", "Сейчас " &amp; @HOUR &amp; " часов. " &amp; $msg)

Конструкции повторения

В AutoIt есть три вида циклических конструкций:

  1. циклы с предусловием
  2. циклы с постусловием
  3. циклы с известным количеством повторений.

Цикл "While ... WEnd". Если условие верно, то все команды вплоть до WEnd будут выполняться до тех пор, пока выражение перестанет быть верным.

$i = 0  
While $i <= 5  
  MsgBox(0, "","Значение $i : " &amp; $i)  
  $i = $i + 1  
WEnd

Цикл "Do ... Until", "Делай ... До". Циклическое выполнение команд до тех пор, пока указанное условие не станет верным.

$i = 0  
Do  
  MsgBox(0, "", "Значение $i : " &amp; $i)  
  $i = $i + 1  
Until $i = 5

Выражения "For ... Next" могут быть вложены друг в друга. Цикл For завершается когда значение переменной превышает заданное значение Стоп.

For $i = 5 to 1 Step -1  
  MsgBox(0, "Отсчёт!", $i)  
Next  
MsgBox(0,"Старт", "Поехали!")

Определние пользовательских функций

Пользовательские функции создаются конструкцией:

Func Название_Функции_На_Латинице()   ; Тело функции  EndFunс

Пример объявления и вызова функции:

Func ShowMessage($param_title, $param_text, $param_type = 0)  
  MsgBox($param_type, $param_title, $param_text)  
EndFunc  
ShowMessage("Welcome","Hi! How are you?")

Применение на практике

В данном примере с использованием AutoIt реализуются часы:

  #include <GUIConstantsEx.au3> ; Включение указанного файла внутрь текущего сценария. 
  ;- Окно ------------------------------
  GUICreate("Часы", 155, 111, 192, 114)
  GUISetState()
  ;-------------------------------------
  ;- Часы -------------------------------------------------------------
  AdlibRegister("MainScript", 400) ; Обновление часов
  $Clock = GUICtrlCreateLabel(@HOUR &amp; ":" &amp; @MIN &amp; ":" &amp; @SEC, 50, 20)
  ;--------------------------------------------------------------------
  ;- Настройки ---------------------
  While 1
      $nMsg = GUIGetMsg()
      Switch $nMsg
          Case $GUI_EVENT_CLOSE
              Exit
      EndSwitch
  WEnd
  ;---------------------------------
  ;- Сверка часов с компьютером -----------------------------
  Func MainScript()
      GUICtrlSetData($Clock, @HOUR &amp; ":" &amp; @MIN &amp; ":" &amp; @SEC)
   EndFunc
  ;------------------------------------------------------------

Сообщество AutoIt

Официальный англоязычный форум находится по адресу http://www.autoitscript.com/forum/. Там пользователи могут делиться своими скриптами и функциями, получать техподдержку, сообщать о багах, вносить идеи и предложения, общаться с разработчиками.

Также есть сайт русскоязычного сообщества, который находится по адресу http://autoit-script.ru/.

Список литературы