AutoHotkey

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
AutoHotkey
AutoHotkey logo.png
Тип Язык сценариев
Автор
Разработчик AutoHotkey Foundation LLC[d][1]
Написана на C++[2]
Операционная система Microsoft Windows
Аппаратная платформа Microsoft Windows
Последняя версия
Читаемые форматы файлов AHK script[d]
Лицензия GNU GPL
Сайт autohotkey.com

AutoHotkey — свободно распространяемый язык для автоматизации выполнения задач в Microsoft Windows.

AutoHotkey является языком программирования сценариев (скриптов), приспособленным к лёгкому назначению и переназначению горячих клавиш, включая кнопки мыши и джойстика. Скрипты представляют собой текстовые файлы, с расширением «.ahk». В комплект поставки входит утилита, позволяющая «скомпилировать» их в EXE файлы, и запускать на любом компьютере с ОС Windows, при этом в создаваемый файл могут быть включены другие файлы, извлекаемые при запуске.

AutoHotkey позволяет автоматизировать задачи пользователя Windows таким образом, какой невозможен или затруднён в других языках программирования. Кроме того, этот язык компактен, самодостаточен и работает на всех версиях Windows «прямо из коробки».

AutoHotkey можно использовать для симуляции действий клавиатуры, мыши и джойстика, запуска программ, изменения их интерфейса, управлять окнами, файлами и папками, работать с буфером обмена и системным реестром. Команды могут быть вызваны горячими клавишами.

Также имеются возможности создания GUI, отправки и приёма оконных сообщений, вызова функций DLL, обработки текста при помощи регулярных выражений.

AutoHotkey возник как ответвление проекта AutoIt, когда её автор предложил встроить более тесную поддержку горячих клавиш в AutoIt v2, но не нашёл понимания. Так автор решил разработать собственный язык, основанный на синтаксисе AutoIt v2 и использующий некоторые возможности AutoIt v3.

В настоящее время развитие изначальной ветки — AutoHotkey 1.0 (впоследствии названной AutoHotkey Basic, Classic, Vanilla) — прекращено её создателем Chris Mallett'ом. Официальный наследник — AutoHotkey 1.1 (AutoHotkey_L) — развивается силами сообщества во главе Steve Gray (Lexikos) и fincs, эта версия предоставляет поддержку Юникода, 64-разрядной архитектуры, массивов, объектов с прототипным конструированием, а также COM и элементов управления ActiveX в GUI.

Пользователь с псевдонимом tinku99 разработал пользовательскую сборку AutoHotkey_N, позволяющая встроить интерпретатор AutoHotkey в другое приложение или язык. Он обеспечивает функциональность AutoHotkey, которую может быть сложнее реализовать на другом языке.

Пользователь с псевдонимом HotKeyIt почти в тоже же время выпустил на базе AutoHotkey_N свой версию AutoHotkey_H, помимо интеграции через dll, ее можно было использовать и через COM. Так же была попытка реализовать защиту кода, что достигалось благодаря криптографии и антиотладочным приемам. По некоторым данным на Windows 10 наблюдается нестабильность запуска.

В настоящее время уже несколько лет происходить разработка второй версии, в данный момент находится в альфа-версии. В данной версии произведено реструктурирование синтаксиса.

О языке[править | править код]

Возможности языка включают:

  • Совместимость с Windows XP / 2003 / Vista / 2008 / 7 / 2008 R2 / 8 / 8.1 / 2012 / 10
  • Версия для 64-битных систем.
  • Поддержка Юникода.
  • Запуск консольных приложений и доступ к стандартным потокам ввода-вывода.
  • Запуск программ от имени другого пользователя.
  • Компиляция скрипта в EXE файл.
  • Включение файлов в скомпилированный файл, которые можно извлекать при запуске.
  • Сжатие и защита исполняемого файла от декомпиляции.
  • Создание графических интерфейсов GUI, информационных сообщений, форм ввода информации.
  • Вызов функций из динамических библиотек и функций Windows API.
  • Работа с реестром Windows, буфером обмена, файлами (чтение, изменение, копирование, удаление).
  • Работа с объектами COM (Сomponent object modelling).
  • Перехват и эмуляция клавиатурных нажатий и кликов мышки.
  • Работа с окнами (особенно легко работать с графическими элементами из Windows): передвижение, скрытие, отображение, изменение размера, активизация, закрытие. К окнам можно обращаться по их заголовку, отображаемому тексту, размеру, расположению, классу, по внутренним дескрипторам (handle) Win32 API, определяемым с помощью входящей в комплект поставки утилиты WindowSpy.
  • Получение информации и взаимодействие с элементами управления (особенно стандартными): поле редактирования, переключатель, список, кнопки, статусная строка и т. д., в том числе неактивными.
  • Интернет: чтение HTML кода страниц и скачивание файлов, работа с FTP, отправка E-mail сообщений, работа с базами данных MySQL и SQLite.
  • Работа с протоколами TCP и UDP.
  • Автоматизация работы в браузерах: Internet Explorer, Opera, Firefox, Google Chrome.
  • Обычные элементы высокоуровневого языка, такие как работа с циклами, функциями и переменными.
  • Огромное количество функций для работы с текстом (как со строками и массивами данных, так и с отдельными символами), в том числе с регулярными выражениями в стиле Perl (используется библиотека PCRE).
  • Работа со звуком и музыкой.
  • Работа со сложными математическими, геометрическими и физическими расчётами (например, с тригонометрическими функциями).
  • Простой синтаксис.
  • AutoHotkey_H — объединённая версия в виде COM и DLL, позволяющая использовать возможности AHK в программах, написанных на других языках.
  • Оптимизация и автоматизация монотонных действий (удаление, перемещение временных файлов, очистка кэш-данных, скачивание файлов).

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

Для AutoHotkey существует интегрированная среда разработки под названием SciTE4AutoHotkey, основанная на бесплатном редакторе SciTE. Компилятор, вспомогательные утилиты и справочные материалы полностью интегрированы, что делает редактор стандартным окружением для разработчиков, использующих AHK. Компилятор AHK и среда разработки SciTE легко устанавливаются и в дополнительной настройке не нуждаются.

Подобно другим скриптовым языкам, AutoHotkey — язык третьего поколения, использующий классическую модель и переменные вариантного типа, позволяющие хранить различные типы данных, включая массивы.

Популярное использование AutoHotkey:

  • Разработка утилит для Microsoft Windows.
  • Мониторинг веб-сайтов, сетей.
  • Дефрагментация дисков и резервное копирование.
  • Переназначение клавиш, глобально или у отдельных программ
  • Управление мышкой с помощью клавиатуры или джойстика
  • Слежение за системой, автоматическое выполнение некоторых действий по желанию пользователя.
  • Создание ботов/читов/помощников/биндеров к играм. Боты позволяют автоматизировать некоторые действия в играх, в результате пользователь может быстрее добиться нужного результата.

Для упрощения разработки графических интерфейсов существует визуальный редактор SmartGUI Creator.

Исходный код AutoHotkey всех версий на языке С++ доступен для загрузки на GitHub.

Текущая версия языка доступна для скачивания на официальном сайте проекта, также как и предыдущие релизы.

Примеры[править | править код]

Программа «Привет, мир»:

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

Создание диалогового окна:

1 ; Выводит диалоговое окно с кнопками «Да» и «Нет». В случае нажатия «Да» — выход из программы.
2 MsgBox, 4, Вопрос, Хотите выйти из программы? 
3 IfMsgBox, Yes
4     ExitApp
5 else
6     MsgBox, Спасибо что остались с нами.

Запуск блокнота:

1 Run, notepad.exe

Будильник на 12 часов и 00 минут:

 1 SetTimer, CheckTime, 300 ; Установка таймера на метку раз в 300 милисекунд.
 2 return ; Конец раздела автоматического выполнения. Сценарий приостанавливается, пока не сработает метка.
 3 
 4 CheckTime:
 5 	if (A_Hour == 12 && A_Min == 00) ; Если время настало.
 6 	{
 7 		ToolTip, Будильник. ; Выводим сообщение.
 8 		Sleep, 3000 ; Ждем 3 секунды.
 9 		ToolTip ; Скрываем сообщение.
10 	}
11 return

Скрытие/Показ курсора при нажатии Win + C.

 1 ; Скрывает/Показывает курсор мыши при нажатии клавиши Win + C.
 2 
 3 OnExit, ShowCursor ; При завершении работы скрипта, показываем курсор.
 4 return ; Конец раздела автоматического выполнения. Сценарий приостанавливается, пока пользователь не сделает что-нибудь.
 5 
 6 ShowCursor:
 7 	SystemCursor("On")
 8 ExitApp
 9 
10 #c::SystemCursor("Toggle") ; При нажатии на Win + C показываем/скрываем курсор.
11 
12 SystemCursor(status := 1)
13 {
14 	static AndMask, XorMask, $, hСursor
15 		, c0,c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13 ; Системный курсор.
16 		, b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13 ; Пустой курсор.
17 		, h1,h2,h3,h4,h5,h6,h7,h8,h9,h10,h11,h12,h13 ; Дескрипторы курсора по умолчанию.
18 	if (status = "Init" or status = "I" or $ = "") ; Инициализация при первом вызове.
19 	{
20 		$ = h ; Активный курсор по умолчанию.
21 		VarSetCapacity( hСursor,4444, 1 )
22 		VarSetCapacity( AndMask, 32*4, 0xFF )
23 		VarSetCapacity( XorMask, 32*4, 0 )
24 		system_cursors = 32512,32513,32514,32515,32516,32642,32643,32644,32645,32646,32648,32649,32650
25 		StringSplit c, system_cursors, `,
26 		Loop %c0%
27 		{
28 			hСursor := DllCall("LoadCursor", "Ptr", 0, "Ptr", c%A_Index%)
29 			h%A_Index% := DllCall("CopyImage", "Ptr", hСursor, "UInt", 2, "Int", 0, "Int", 0, "UInt", 0)
30 			b%A_Index% := DllCall("CreateCursor", "Ptr", 0, "Int", 0, "Int", 0, "Int", 32, "Int", 32, "Ptr", &AndMask, "Ptr", &XorMask)
31         }
32     }
33 	if (status = 0 or status = "Off" or $ = "h" and (status < 0 or status = "Toggle" or status = "T"))
34 		$ = b  ; Используем пустой курсор.
35 	else
36 		$ = h  ; Используем системный курсор.
37 	
38 	Loop %c0%
39 	{
40 		hСursor := DllCall( "CopyImage", "Ptr",%$%%A_Index%, "UInt",2, "Int",0, "Int",0, "UInt",0 )
41 		DllCall("SetSystemCursor", "Ptr", hСursor, "UInt", c%A_Index%)
42 	}
43 }

Пример скрипта с использованием графического интерфейса:

 1 Gui, Add, Text,, Имя:
 2 Gui, Add, Text,, Фамилия:
 3 Gui, Add, Edit, vFirstName ym ; Параметр ym запускает новый столбец элементов управления.
 4 Gui, Add, Edit, vLastName
 5 Gui, Add, Button, default, OK ; Метка ButtonOK (если она существует) будет запущена при нажатии кнопки.
 6 Gui, Show,, Простой Пример Ввода
 7 return ; Конец раздела автоматического выполнения. Сценарий приостанавливается, пока пользователь не сделает что-нибудь.
 8 
 9 ButtonOK:
10 	Gui, Submit ; Сохраняет входные данные пользователя в связанную переменную каждого элемента управления.
11 	MsgBox Ваша Имя Фамилия: "%FirstName% %LastName%".
12 GuiClose: ; Запускается при закрытии интерфейса.
13 ExitApp

См. также[править | править код]

Примечания[править | править код]

Ссылки[править | править код]