Ahk на русском


Autohotkey Документация

Справочник по программе автоматизации приложений Autohotkey.Документация, команды и обучение работе со средой.

Скрыть / Показать описание

Новости проекта!

Начало работы

Основное

  • Горячие клавиши- Горячие клавиши для мыши, джостика, клавиатуры
  • Создание макрокоманды- Создание макрокоманды клавиатуры или мыши
  • Потоки- Потоки, приоритет потоков
  • Замена системных ГК- Замена и отключение системных горячих клавиш
  • Строки автозамены- Автоматическая замена вводимого текста
  • Переназначение клавиш- Переназначение клавиш и кнопок мыши
  • Список клавиш- Полный список клавиш, кнопок мыши и джойстика
  • Скрипты и комментарии- Скрипты, комментарии, разбивка строк, скрипты с параметром
  • Переменные, выражения- Переменные, выражения, операторы
  • Функции- Создание и использование функций
  • Список команд- Полный список команд

Циклы

  • Loop- Повторяет участок кода несколько раз
  • While-Loop- Повторяет участок кода пока условие не выполнится
  • Break- Принудительно завершает цикл
  • Continue- Переходит к следующему шагу (интерации) цикла

Управляющие конструкции

  • Gosub- Переходит к метке и выполняется пока не сталкивается с возвратом
  • Goto- Переходит к указанной метке и продолжает выполнение
  • SetTimer- Переходит к метке через заданное время
  • Return- Возвращает значение и останавливает чтение скрипта

Функции

  • Регулярные выражения- Регулярные выражения (RegEx) краткий справочник
  • RegisterCallback()- Создает адрес, при обращении к которому вызов перенаправляется к одной из функций скрипта

Математические команды

  • EnvAdd (+=, ++)- Увеличивает переменную на значение
  • EnvDiv (/=)- Делит переменную на значение
  • EnvMult (*=)- Умножает переменную на значение
  • EnvSub (-=, --)- Уменьшает переменную на значение

Файловая система

  • Drive- Выдвигает лоток привода, задаёт метку диска
  • DriveGet- Информация о дисках компьютера
  • DriveSpaceFree- Определяет объём свободного места на диске
  • FileAppend- создает файл, добавляет текст к файлу
  • FileCopy- Копирует файлы
  • FileCopyDir- Копирует папку
  • FileCreateDir- Создает папку
  • FileCreateShortcut- Создает ярлык
  • FileDelete- Удаляет файлы
  • FileGetAttrib- Получает атрибуты файла или папки
  • FileGetShortcut- Собирает информацию о ярлыке
  • FileGetSize- Получает размер файла
  • FileGetTime- Возвращает дату и время файла или папки
  • FileGetVersion- Возвращает версию файла
  • FileInstall- Включает файл в компилированный скрипт
  • FileMove- Перемещает или переименовывает файлы
  • FileMoveDir- Перемещает папку с подпапками
  • FileRead- Читает файл в переменную
  • FileReadLine- Читает строку из файла
  • FileRecycle- Отправляет файл в корзину
  • FileRecycleEmpty- Очищает корзину
  • FileRemoveDir- Удаляет папку
  • FileSetAttrib- Устанавливает атрибуты файлам и папкам
  • FileSetTime- Устанавливает метку времени файлам и папкам
  • IfExist / IfNotExist- Проверяет существование папки или файла
  • IniDelete- Удаляет параметр из ini файла
  • IniRead- читает параметр из ini файла
  • IniWrite- пишет параметр в ini файл
  • Loop (файлы и папки)- Возвращает указанные файлы или папки по одному
  • Loop (чтение файла)- Построчное чтение файла
  • SetWorkingDir- Изменяет текущую рабочую папку скрипта
  • SplitPath- Разделение пути файла на состовляющие

Диалоговые окна

ГК и строки автозамены

  • Hotkey- Действия над горячими клавишами при запущеном скрипте
  • ListHotkeys- Показывает список горячих клавиш, используемых в данном скрипте
  • Suspend- Отключает или включает горячие клавиши

Управление клавиатурой

  • BlockInput- Блокирует ввод с клавиатуры или мыши
  • GetKeyState- Получает состояние клавиши
  • KeyHistory- История нажатий клавиш
  • KeyWait- Ожидает нажатия клавиши
  • Input- Ждет пока пользователь напечатает строку
  • Send (Raw/Input/Play/Event)- Посылает нажатия клавиш
  • SendMode- Переключает режимы нажатия клавиш
  • SetKeyDelay- Устанавливает задержку нажатия клавиш
  • SetNumScrollCapsLockState- Устанавливает состояние клавиш CapsLock/NumLock/ScrollLock
  • SetStoreCapslockMode- Определяет, вернуть ли состояние CapsLock после команды Send

Управление мышью

  • Click- Щёлкает кнопкой мыши в заданном координатами месте
  • ControlClick- Посылает элементу управления нажатие кнопки мыши
  • MouseClick- Кликает, зажимает клавишу или вращает колесо
  • MouseClickDrag- Нажимает и перетаскивает
  • MouseGetPos- Получает координаты мыши и заголовок окна
  • MouseMove- Перемещает мышь к координатам
  • SetdefaultMouseSpeed- Устанавливает скорость мыши по умолчанию
  • SetMouseDelay- Задаёт паузу после каждого действия мыши

Управление процессами

  • Exit- Выход из текущего потока
  • ExitApp- Завершение скрипта
  • OnExit- Задает метку, запускаемую при завершении скрипта
  • Process- Выполняет ряд операций над процессами
  • Run / RunWait- Запускает указанную программу, открывает документ
  • RunAs- Задаёт набор учётных данных пользователя для Run и RunWait
  • Shutdown- Завершение работы системы, перезагрузка, завершение сеанса
  • Sleep- Ждёт заданное количество времени прежде чем продолжить

Управление реестром

  • Loop (registry)- Извлекает содержимое указанного раздела реестра
  • RegDelete- Удаляет раздел или параметр реестра
  • RegRead- Читает параметр из реестра
  • RegWrite- Записывает параметр в реестр

Управление звуком

  • SoundBeep- Издаёт звук через динамик системного блока
  • SoundGet- Считывает настройки звукового устройства
  • SoundGetWaveVolume- Считывает положение регулятора Wave (Звук)
  • SoundPlay- Проигрывает аудио и видеофайлы
  • SoundSet- Изменяет настройки звукового устройства (микшера)
  • SoundSetWaveVolume- Изменяет положение регулятора Wave (Звук)

Работа со строками

  • FormatTime- Служит для преобразования времени YYYYMMDDHh34MISS
  • IfInString/IfNotInString- Проверяет, содержит ли переменная указанную строку
  • If var [not] in/contains- Проверяет, содержит ли переменная какую-либо строку из списка
  • Loop (parse a string)- Извлекает подстроки (поля) из указанной строки
  • RegExMatch()- Ищет в строке подстроки, соответствующие указанному шаблону
  • RegExReplace()- Заменяет в строке подстроки, отвечающие шаблону
  • SetFormat- Задаёт формат для целых и дробных (с плавающей запятой) чисел
  • StringReplace- Заменяет во входной строке указанную подстроку

Окна

  • DetectHiddenText- Определяет, будет ли невидимый текст в окне использоваться при поиске окна
  • DetectHiddenWindows- Определяет, будут ли скрытые окна видимы для скрипта
  • IfWinActive / IfWinNotActive- Проверяет, существует ли указанное окно и является ли оно активным
  • Посл. найденное окно и WinTitle- Последнее найденное окно и параметр WinTitle
  • IfWinExist / IfWinNotExist- Проверяет, существует ли указанное окно
  • SetTitleMatchMode- Задает режим поиска соответствия
  • SetWinDelay- Устанавливает длину паузы, вставляемой после каждой оконной команды
  • StatusBarGetText- Считывает текст из стандартной строки состояния окна
  • StatusBarWait- Ожидает появления в строке состояния окна указанного текста
  • WinActivate- Активирует указанное окно
  • WinActivateBottom- Активирует самое нижнее из окон, отвечающих указанным параметрам
  • WinClose- Закрывает указанное окно
  • WinGet- Получает различные данные об окне
  • WinGetActiveStats- Объединяет в себе функции команд WinGetActiveTitle и WinGetPos
  • WinGetActiveTitle- Возвращает заголовок активного окна
  • WinGetClass- Возвращает имя класса указанного окна
  • WinGetPos- Возвращает позицию и размеры указанного окна
  • WinGetText- Читает текст указанного окна
  • WinGetTitle- Возвращает заголовок указанного окна
  • WinHide- Прячет указанное окно
  • WinKill- Принудительно закрывает указанное окно
  • WinMaximize- Разворачивает указанное окно до максимального размера
  • WinMinimize- Сворачивает указанное окно в кнопку на панели задач
  • WinMinimizeAll (Undo)- Первая команда сворачивает, вторая восстанавливает все окна
  • WinMove- Изменяет позицию и размеры указанного окна
  • WinRestore- Восстанавливает размеры свёрнутого или развёрнутого окна
  • WinSet- Производит разнообразные изменения в указанном окне
  • WinSetTitle- Меняет заголовок указанного окна
  • WinShow- Показывает указанное скрытое окно
  • WinWait- Дожидается существования указанного окна
  • WinWaitActive (NotActive)- Ожидает активности/неактивности окна
  • WinWaitClose- Ждёт закрытия указанного окна

Элементы управления окон

  • Control- Производит разнообразные изменения в контролах
  • ControlFocus- Помещает фокус ввода на указанный контрол
  • ControlGet- Считывает разнообразную информацию о контролах
  • ControlGetFocus- Определяет, на каком контроле окна находится фокус
  • ControlGetPos- Определяет расположение и размеры контрола
  • ControlGetText- Считывает текст из контрола
  • ControlMove- Передвигает контрол, меняет размеры
  • ControlSend (Raw)- Посылает нажатия клавиш в окно или его контрол
  • ControlSetText- Изменяет текст контрола
  • Menu- Создаёт, удаляет, модифицирует и показывает меню
  • PostMessage/SendMessage- Посылают сообщение окну или его контролу
  • Отправка сообщений окну- Отправка сообщений окну или его элементам управления
  • Коды оконных сообщений- список возможных значений параметра Msg
  • SetControlDelay- Устанавливает паузу после команды, изменяющей контрол
  • WinMenuSelectItem- Вызывает выполнение пункта строки меню указанного окна

Группы окон

  • GroupActivate- Активирует следующее окно в группе окон
  • GroupAdd- Добавляет определение окна в группу окон
  • GroupClose- Закрывает последнее окно группы и активирует предыдущее
  • GroupDeactivate- Активирует следующее окно, не входящее в группу

Управление средой

  • ClipWait- Ожидает поступления данных в буфер обмена
  • Буфер обмена (Clipboard)- Переменные буфера обмена
  • EnvSet- Задаёт значение переменной окружения
  • EnvGet- Получает значение переменной окружения
  • EnvUpdate- Уведомляет ОС и приложения, что переменные среды изменились

Прочие команды

  • DllCall()- Вызывает функцию в DLL
  • SetBatchLines- Устанавливает скорость выполнения скрипта

Директивы

  • #AllowSameLineComments- Позволяет комментарию находиться на одной строке с командой
  • #ClipboardTimeout- Время, которое скрипт пытается получить доступ к буферу обмена
  • #CommentFlag- Изменяет символ комментария в скрипте
  • #ErrorStdOut- Выводит сообщения о ошибках, в стандартный вывод
  • #EscapeChar- Меняет экранирующий символ скрипта
  • #HotkeyInterval- Задает частоту активаций горячей клавиши
  • #HotkeyModifierTimeout- Влияет на поведение горячих клавиш: CTRL, ALT, WIN и SHIFT
  • #Hotstring- Меняет настройки строк автозамены или их конечные символы
  • #Include/#IncludeAgain- Место, куда будет вставлено содержимое указанного файла
  • #InstallKeybdHook- Принуждает скрипт к безусловной установке хука клавиатуры
  • #InstallMouseHook- Принуждает скрипт к безусловной установке хука мыши
  • #KeyHistory- Максимальное количество событий, отображаемое окном KeyHistory
  • #MaxHotkeysPerInterval- Задает частоту активаций горячей клавиши
  • #MaxMem- Ограничивает максимальный размер каждой переменной
  • #MaxThreads- Задаёт максимальное число одновременных потоков
  • #MaxThreadsBuffer- Заставляет горячие клавиши буферизовать, а не игнорировать нажатия
  • #MaxThreadsPerHotkey- Максимальное количество потоков для комбинации горячих клавиш
  • #NoEnv- Отменяет проверку для пустых переменных
  • #NoTrayIcon- Не показывать значок скрипта в трее
  • #Persistent- Делает скрипт постоянно выполняющимся
  • #SingleInstance- Разрешено ли скрипту запускаться, если он уже выполняется
  • #UseHook- Заставляет скрипт использовать хук для горячих клавиш
  • #WinActivateForce- Использовать сразу принудительный метод активации окна

Теги страницы: autohotkey, автохоткей, ahk, wiki, справочник, учебник, горячие клавиши, функции, команды, обучение

ahk-wiki.ru

Scripts -Autohotkey

Каждый скрипт представляет собой простой текстовый файл, содержащий команды, которые затем будет исполнять программа (AutoHotkey.exe). Скрипт также может содержать горячие клавиши и строки автозамены, и даже полностью состоять из них. Однако, в отсутствие горячих клавиш и строк автозамены, после запуска скрипта его команды исполняются последовательно друг за другом сверху донизу.

Каждый скрипт представляет собой простой текстовый файл, содержащий команды, которые затем будет исполнять программа (AutoHotkey.exe). Скрипт также может содержать горячие клавиши и строки автозамены, и даже полностью состоять из них. Однако, в отсутствие горячих клавиш и строк автозамены, после запуска скрипта его команды исполняются последовательно друг за другом сверху донизу.

При запуске скрипты оптимизируются и проверяются. Сообщения об ошибках выводятся на экран. Скрипт может быть запущен (будет работать) только после их исправления.

Содержание

Секция авто-выполнения: автоматически исполняемая верхняя секция скрипта.

Escape-последовательности: использование символов `% и `, для указания на буквальные знаки процента или запятой.

Комментарии в скриптах: использование точки с запятой и символов /*...*/ для добавления в скрипт примечаний.

Разбивка длинных строк на ряд более коротких: повышает удобство чтения и эксплуатации скрипта.

Мобильность AutoHotkey.exe: чтобы запустить любой .ahk-файл, достаточно иметь копию исполняемого файла AutoHotkey.exe.

Конвертация скрипта в исполняемый EXE-файл (ahk2exe): конвертация скрипта с расширением .ahk в .exe-файл, который затем можно запустить на любом компьютере.

Передача скрипту параметров командной строки: переменные %1%, %2% и т.д. содержат входные параметры.

Отладка скрипта: как найти ошибки в неправильно работающем скрипте.

Секция авто-выполнения

Программа, строка за строкой, загружает скрипт в память (каждая строка может содержать до 16 383 символов). После загрузки программа исполняет скрипт до тех пор, пока не дойдет до команд Return, Exit, метки горячей клавиши или строки автозамены, или конца скрипта (в зависимости от того, что стоит первым). Эта верхняя часть скрипта называется секцией авто-выполнения.

Не завершающий работу автоматически и не содержащий горячие клавиши и строки автозамены скрипт заканчивает свою работу после окончания секции авто-выполнения. Иначе, он будет работать в состоянии ожидания, реагируя на такие события, как запуск горячих клавиш и строк автозамены, события GUI, вызов элементов пользовательского меню и таймеры.

Каждый поток, запущенный горячей клавишей, строкой автозамены, вызовом элемента меню, событием GUI или таймером, непосредственно после запуска начинает исполняться, используя значения по умолчанию для указанных далее параметров, как задано в секции авто-выполнения. Если значения не заданы, будут использованы стандартные значения по умолчанию (как описано в документации для каждой из следующих команд): DetectHiddenWindows, DetectHiddenText, SetTitleMatchMode, SetBatchLines, SetKeyDelay, SetMouseDelay, SetWinDelay, SetControlDelay, SetdefaultMouseSpeed, CoordMode, SetStoreCapslockMode, AutoTrim, SetFormat, StringCaseSense, Thread, and Critical.

Если для завершения работы секции авто-выполнения требуется много времени, (или если секция никогда не завершается), через 100 миллисекунд вступают в действие значения по умолчанию приведенных выше параметров настройки. Таким образом, обычно лучшим решением для скриптов, содержащих горячие клавиши, строки автозамены, таймеры или элементы пользовательского меню, является внесение желаемых изменений в значения по умолчанию в верхней части этих скриптов. Обратите также внимание, что каждый поток сохраняет свой собственный набор упомянутых выше параметров настройки. Изменения, сделанные в этих параметрах, не повлияют на другие потоки.

Escape-последовательности

В AutoHotkey escape-символом по умолчанию является знак акцента (`), находящийся в верхнем левом углу большинства английских клавиатур. Использование этого символа вместо обратного слеша устраняет необходимость в двойном обратном слеше в пути и имени файла.

Так как в языке AutoHotkey запятые и знаки процента имеют специальное значение, то чтобы задать буквальные запятую и знак процента, используется знак акцента `. Исключениями из этого правила являются команда MsgBox, где в экранировании запятых нет необходимости, и запятые в последнем параметре любой команды - их также не нужно экранировать. Полный список escape-последовательностей - см. документацию по директиве #EscapeChar.

Также с помощью escape-последовательности задаются специальные символы. Чаще всего это `t (табуляция), `n (перевод строки) и `r (возврат каретки).

Комментарии

В скрипте можно добавлять комментарии в начале строки после точки с запятой. Например:

; Вся эта строка является комментарием.

Также комментарии можно вставлять после команды. В этом случае перед точкой с запятой должен быть хотя бы один пробел или табуляция. Например:

Run Notepad ; Этот комментарий находится на той же строке, что и команда.

Кроме того, можно использовать символы /* и */, чтобы закомментировать целый раздел. Однако в этом случае символы должны ставиться в начале строки, как показано в следующем примере:

/* MsgBox, Эта строка является комментарием (заблокирована). MsgBox, Эта тоже. */

Совет: можно опустить первую запятую в любой команде. Например:

MsgBox Это - хорошо. MsgBox, Это - хорошо тоже.

Разбивка длинных строк на ряд более коротких

Чтобы повысить удобство чтения и эксплуатации скрипта, можно разбить длинные строки на совокупность более коротких. Такая разбивка не уменьшает быстродействие, так как в момент запуска скрипта разделенные строки объединяются в памяти.

Способ №1 [v1.0.35.03+]: cтрока, начинающаяся с "and", "or", ||, &&, запятой или точки автоматически объединяется со строкой, находящейся непосредственно выше нее. В следующем примере вторая строка объединяется с первой, так как начинается с запятой.

FileAppend, Это текст для добавления.`n , %A_ProgramFiles%\SomeApplication\LogFile.txt

Подобным образом приведенные ниже строки сольются в одну, так как две последние строки начинаются с "and" или "or":

if (Color = "Red" or Color = "Green" or Color = "Blue" or Color = "Black" or Color = "Gray" or Color = "White") and ProductIsAvailableInColor(Product, Color)

Хотя делать отступы так, как в последнем примере, необязательно, они наглядно показывают, какие строки являются продолжением первой строки. Также нет необходимости ставить дополнительный пробел после каждой из первых двух строк - программа делает это автоматически. Кроме того, между строками или в конце каждой строки в последнем примере можно добавить пустые строки или комментарии.

Способ №2 [v1.0.32+]: этот метод используется для объединения большого количества строк, или если строки нельзя объединить с помощью способа №1. Хотя данный способ предназначен главным образом для простой автозамены, его можно использовать также для любой команды или выражения. Например:

FileAppend, ; Здесь необходима запятая. ( Строка текста. По умолчанию жесткий возврат каретки (Enter) между этой и предыдущей строками будет записан в файл. По умолчанию табуляция слева от данной строки также будет записана в файл. По умолчанию ссылки на переменные, такие как %Var%, замещаются значениями переменных. ), C:\My File.txt

В приведенном примере ряд строк, ограниченных сверху и снизу парой круглых скобок, называется секцией продолжения. Обратите внимание, что нижняя строка после закрывающей скобки содержит последний параметр FileAppend. Этот параметр ставится по желанию: в данном примере это сделано, чтобы запятая была продемонстрирована как ограничитель параметра, а не как буквальная запятая.

Поведение по умолчанию секции продолжения можно изменить, если справа от открывающей скобки секции добавить одну или несколько приведенных ниже опций. Каждая опция отделяется от предыдущей пробелом. Например: ( LTrim Join| %

Join: определяет, каким способом строки должны соединяться друг с другом. Если эта опция пропущена, за каждой строкой (кроме последней) будет следовать символ перевода строки (`n). Если задано одно слово Join, строки будут состыкованы непосредственно друг с другом без каких-либо символов между ними. Иначе, сразу после слова Join можно задать до 15 символов. Например, если задана опция Join`s, то после каждой строки (кроме последней) будет вставлен пробел (`s обозначает буквальный пробел - это специальная escape-последовательность, распознаваемая только опцией Join). Еще один пример: при заданной опции Join`r`n между строками будет вставлена комбинация CR+LF (возврат каретки + перевод строки). Подобным образом, при Join| между строками будет вставлен символ конвейера (pipe). Чтобы последняя строка в секции также заканчивалась символами, указанными в опции Join, вставьте сразу же над закрывающими скобками пустую строку.

LTrim: исключает пробелы и табуляцию в начале каждой строки. В основном эта опция используется для того, чтобы расположить строки в секции продолжения в иерархическом порядке. В версии 1.0.35.06 и выше данную опцию можно задать сразу для многих секций продолжения. Для этого в строке необходимо задать опцию #LTrim (без дополнительных символов). Опция #LTrim является позиционной - она воздействует на все секции продолжения, (физически) находящиеся ниже нее. Настройку можно выключить, задав #LTrim Off.

RTrim0 (RTrim + цифра 0): выключает пропуск пробелов и табуляции в конце каждой строки.

% (знак процента): трактует знак процента как буквальный, а не как ссылку на переменную. Устраняет необходимость экранировать каждый знак процента. Данная опция не нужна там, где знак процента уже является буквальным (например, в простой автозамене).

, (запятая): трактует запятые как ограничители, а не как буквальные запятые. Эта редко используемая опция нужна только для запятых между параметрами команд, так как в вызовах функций тип запятой не имеет значения. Таким образом, данная опция преобразует только те запятые, которые фактически ограничивают параметры. Другими словами, как только достигнут последний параметр команды (или если в команде параметры не заданы), идущие следом запятые трактуются как буквальные.

` (акцент): трактует каждый символ акцента буквально, а не как escape-символ. Эта опция также исключает экранирование запятых и знаков процента явно и по отдельности. Кроме того, опция исключает преобразование любой заданной явно escape-последовательности, как `r or `t.

Примечания

Секция продолжения поддерживает такие escape-последовательности, как `n (перевод строки) and `t (табуляция), кроме случаев, когда задана опция (`) (акцент).

Секция продолжения не поддерживает комментарии (точка с запятой и /*..*/), так как рассматривает их как буквальный текст. Однако комментарии можно добавить в верхней и нижней строках секции продолжения. Например:

FileAppend, ; Комментарий. ; Здесь поддерживаются комментарии (v1.0.35.06+). ( LTrim Join ; Комментарий. ; Это не комментарий; Это буквальный текст. ), C:\File.txt ; Комментарий.

Как видно из примера, экранировать точки с запятой в секции продолжения нет никакой необходимости.

Длина строки в секции продолжения не может быть более 16 383 символов (если их больше, программа предупредит вас в момент запуска скрипта). Единственный способ обойти это ограничение - это использовать конкатенацию (т.е. сцепление) строк, например, добавив в переменную несколько секций продолжения:

Var = ( ... ) Var = %Var%`n ; С помощью еще одной секции продолжения добавляем в переменную дополнительный текст. ( ... ) FileAppend, %Var%, C:\My File.txt

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

Формирование секции продолжения из нескольких частей с помощью команды #Include не поддерживается.

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

Мобильность AutoHotkey.exe

Все, что необходимо для запуска любого .ahk-скрипта - это файл AutoHotkey.exe. Единственным исключением является Windows NT4, где для скриптов, в которых используется команда Process, требуется установка копии psapi.dll (из папки AutoHotkey).

Конвертация скрипта в исполняемый файл EXE (ahk2exe)

Благодаря исходному коду AutoIt v3 Джонатана Беннета (Jonathan Bennett) в пакет AutoHotKey входит компилятор скриптов. AutoHotKey не поддерживает скрипты AutoIt версии 2, поэтому, если есть необходимость в их использовании, нужно сначала автоматически сконвертировать .aut-файл в файл с расширением .ahk.

После конвертации скрипт становится самостоятельным исполняемым файлом, то есть его можно запустить даже на тех компьютерах, где программа AutoHotkey не установлена (такие exe-файлы можно распространять без ограничений). В процессе компиляции скрипт, все входящие в него файлы и те файлы, которые были включены (добавлены) в результате исполнения команды FileInstall, сжимаются и зашифровываются.

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

Ahk2Exe можно запустить следующим образом:

  1. Через графический пользовательский интерфейс (GUI): В меню Пуск выберите: Все программы > AutoHotkey > Convert .ahk to .exe. В появившемся окне укажите путь к компилируемому файлу, и, опционально, название исходящего exe-файла, путь к файлу с иконкой для него и пароль.
  2. Правым кликом мыши: в окне проводника щелкните правой клавишей мыши по иконке .ahk-файла и выберите элемент меню "Скомпилировать скрипт" (доступен, если при установке программы AutoHotkey установлена опция "компилятор скрипта"). В результате через короткое время в том же каталоге будет создан EXE-файл с тем же базовым именем, что и скрипт. Примечание: Созданный EXE-файл будет использовать такую же пользовательскую иконку и уровень сжатия (компрессии), какие в последний раз использовались в первом методе и у него не будет пароля.Чтобы при компиляции данным способом всегда использовалась стандартная иконка AHK, нужно выполнить следующий рег-файл:

    Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\AutoHotkeyScript\Shell\Compile\Command] @="\"C:\\Program Files\\AutoHotkey\\Compiler\\Ahk2Exe.exe\" /in \"%l\" /icon \" \""

    Либо вручную отредактировать параметр "по умолчанию" ветки реестра HKEY_CLASSES_ROOT\AutoHotkeyScript\Shell\Compile\Command, заменив его на

    "C:\Program Files\AutoHotkey\Compiler\Ahk2Exe.exe" /in "%l" /icon " "

    Чтобы при компиляции данным способом всегда использовалась какая-либо другая иконка, замените в ключе /icon пробел в кавычках на путь к файлу с иконкой (допустимы только файлы с расширением .ico).
  3. Через командную строку: компилятор можно запустить из командной строки, задав следующие параметры:

    Ahk2exe.exe /in MyScript.ahk [/out MyScript.exe][/icon MyIcon.ico][/pass password]

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

Важные примечания:

  • Если вы планируете распространять ваш EXE-файл и не хотите, чтобы исходный код был доступен для просмотра, задайте пароль. Помните, что длинные и сложные пароли намного безопаснее, чем короткие.
  • Команды #NoTrayIcon и "Menu, Tray, ShowMainWindow" воздействуют на поведение скомпилированных скриптов.
  • Чтобы извлечь первоначальный скрипт, можно "декомпилировать" исполняемый файл, при помощи утилиты Exe2Ahk (утилита запускается из командной строки). Однако, при этом все комментарии в скрипте (обозначенные как точками с запятой, так и символами /**/) будут утеряны.
  • В скомпилированный скрипт можно добавить пользовательскую информацию о версии (в том же виде, как в диалоге свойств файла в Проводнике). Для этого можно использовать какую-нибудь утилиту, подобную Resource Hacker (эта утилита распространяется свободно), чтобы отредактировать файл "AutoHotkeySC.bin". Этот файл содержится в подпапке "compiler", в папке, в которую был установлен AutoHotkey. Примечание: утилита Resource Hacker портит скомпилированные скрипты, поэтому редакции подлежит только файл AutoHotkeySC.bin.
  • Приведенный выше метод можно использовать также для изменения или добавления новых иконок во все скомпилированные скрипты.
  • Если скрипт запущен в скомпилированной форме, встроенная переменная A_IsCompiled имеет значение 1. Иначе - пустое значение [в версиях 1.0.27 и выше].

Передача скрипту параметров командной строки

Скрипты поддерживают параметры командной строки в следующем формате:

AutoHotkey.exe [Switches] [Script Filename] [Script Parameters]

Для скомпилированных скриптов формат такой:

CompiledScript.exe [Switches] [Script Parameters]

Параметр Switches может быть нулевым или иметь одно из следующих значений:

/f or /force - запускает скрипт безо всяких условий, игнорируя все предупреждающие сообщения.

/r or /restart - Показывает, что скрипт находится в процессе перезагрузки (также это значение внутренне используется командой Reload).

/ErrorStdOut - Посылает синтаксические ошибки в stdout, а не отображает диалог. Подробности см. в описании директивы #ErrorStdOut.

Параметр Script Filename можно опустить, если параметров скрипта нет. Если параметр Script Filename опущен, то будет запущен файл AutoHotkey.ini в текущей рабочей директории (или пользователю будет предложено его создать1).

В качестве Script Parameters может быть любая строка, которую вы хотите передать скрипту (строку, содержащую пробелы, необходимо заключить в двойные кавычки). Скрипт рассматривает входящие параметры как переменные %1%, %2%, и так далее. Кроме того, переменная %0% содержит количество переданных параметров (0, если никаких параметров не передано). Следующий пример прерывает исполнение скрипта, если передано слишком мало параметров:

if %0%

Если количество параметров, переданных скрипту, варьируется (например, из-за того, что пользователь перетаскиванием "бросил" на скомпилированный скрипт несколько файлов), следующий пример поможет извлечь эти параметры один за другим:

Loop, %0% ; Для каждого параметра: { param := %A_Index% ; Извлекаем содержимое переменной, имя которой содержится в A_Index. MsgBox, 4,, Номер параметра %A_Index% - %param%. Продолжить? IfMsgBox, Нет break }

Если параметрами являются имена файлов, то с помощью примера, приведенного ниже, можно преобразовать их в длинные имена с исправленным регистром, включающие полный/абсолютный путь (такие, как хранятся в файловой системе) [для версий 1.0.25.14 и выше].

Loop %0% ; Для каждого параметра (или файла, перетащенного на скрипт): { GivenPath := %A_Index% ; Извлекаем содержимое переменной, имя которой содержится в A_Index. Loop %GivenPath% LongPath = %A_LoopFileLongPath% MsgBox Путь и длинное имя файла с исправленным регистром `n%GivenPath%`nis:`n%LongPath% }

Отладка скрипта

Скрипт можно отладить с помощью таких команд, как ListVars и Pause. Например, если в правильно выбранные места временно вставить две строки, приведенные ниже, в скрипте будут созданы точки прерывания:

ListVars Pause

Когда исполнение скрипта дойдет до этих строк, на экран будет выведено текущее содержимое всех переменных. Закончив проверку переменных, снимите скрипт с паузы через меню File или меню трея. Исполнение скрипта продолжится до следующей точки прерывания (если таковая есть).

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

Команды ListLines, KeyHistory и Outputdebug также очень полезны для отладки.

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

Коллекция полезных скриптов расположена в этом месте по ссылке в оригинале настоящей статьи.

1 Файл AutoHotkey.ini, расположенный в каталоге программы, является своеобразным "скриптом по умолчанию". Содержимое этого файла полностью аналогично любому ahk-скрипту. Если AutoHotkey.exe запускается без параметров, будет запущен именно этот скрипт. Если AutoHotkey.exe запускается без параметров, но файла AutoHotkey.ini не существует, он будет создан, но вместо запуска (исполнения) просто открыт в Блокноте.

Теги страницы:

ahk-wiki.ru

Introduction -Autohotkey

AutoHotkey - это свободная утилита под Windows с открытыми исходными кодами. С помощью этой программы вы сможете:

AutoHotkey - это свободная утилита под Windows с открытыми исходными кодами. С помощью этой программы вы сможете:

  • Автоматизировать почти все процессы лишь нажатием клавиши или кликом мыши. Вы можете писать макросы вручную или с использованием макрорегистраторов.
  • Задавать "горячие" клавиши для клавиатуры, джойстика и мыши. Практически любая клавиша, кнопка или комбинация может стать "горячей" клавишей.
  • Использовать автозамену при печатании. Например, аббревиатура "btw" может автоматически заменяться на "by the way".
  • Создавать пользовательские формы ввода данных, пользовательские интерфейсы и меню. Чтобы получить дальнейшую информацию, см. раздел, посвященный GUI.
  • Переназначать клавиши и кнопки на клавиатуре, джойстике или мыши.
  • Передавать сигналы ручного пульта дистанционного управления через клиентский скрипт WinLIRC.
  • Пользоваться уже существующими скриптами AutoIt v2, а также добавлять в них новые возможности.
  • Конвертировать любой скрипт в EXE-файл, который затем можно запустить даже на компьютерах, где не установлен AutoHotkey.

Начать возможно, будет даже легче, чем вы думаете. Прочитайте раздел "Общий обзор программы и краткое обучение".

Еще немного о "горячих" клавишах

AutoHotkey использует весь потенциал клавиатуры, джойстика или мыши. Например, кроме обычных Control, Alt и Shift, в качестве модификаторов можно использовать также клавиши Windows и Capslock. Фактически, модификатором можно сделать любую клавишу или кнопку мыши. Чтобы узнать об этих и других возможностях, см. соответствующий раздел.

Другие возможности

  • Изменение громкости, приглушение звука (mute) и другие настройки любой звуковой карты.
  • Возможность делать окна прозрачными, устанавливать поверх других окон или изменять их форму.
  • Использование джойстика или клавиатуры в качестве мыши.
  • Мониторинг вашей системы. Например, возможность закрывать нежелательные окна при их появлении.
  • Чтение и изменение содержимого буфера обмена, включая имена файлов, скопированные из окна Explorer.
  • Запрет или замена собственных "быстрых" клавиш Windows, таких, как Win+E и Win+R.
  • Уменьшение травм от работы на клавиатуре путем замены комбинации Alt-Tab на другие клавиши, ролик или кнопки мыши.
  • Настройка меню трея собственными пиктограммами, всплывающими подсказками, пунктами меню и субменю.
  • Отображение диалоговых окон, подсказок и всплывающих меню, обеспечивающих взаимодействие с пользователем.
  • Выполнение заданных сценарием операций в ответ на завершение работы системы или конец сеанса.
  • Определение продолжительности простоя в работе пользователя. Например, запуск объемных задач CPU только в отсутствие пользователя.
  • Автоматизация игровых действий путем распознавания изображений и цветов пикселов.
  • Более простое, чем в других языках, чтение, запись и анализ текстовых файлов.
  • Выполнение операций с файлами с использованием подстановочных символов.
  • Работа с реестром и INI-файлами.

Лицензия: GNU General Public License.

Ограничения для Windows 95/98/Me: некоторые новые возможности, такие, как возможность настроить кнопки мыши в качестве "горячих" клавиш, а также строки автозамены, недоступны под Win9x.

Благодарности

Особая благодарность Джонатану Беннету (Jonathan Bennett) за выпуск в свет в 1999 году бесплатной программы AutoIt v2. Ваша щедрость экономит время и является вдохновением для меня и многих других во всем мире. Кроме того, многие дополнения AutoHotkey к набору команд AutoIt v2, а также Window Spy и скриптовый компилятор были взяты непосредственно из исходного кода AutoIt v3. Большое спасибо за это Джону (Jon) и другим создателям AutoIt.

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

Теги страницы:

ahk-wiki.ru

AutoHotkey – скачать бесплатно | Скачать AutoHotkey (АутоХоткей) на русском языке

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

Скачать AutoHotkey для Windows (7/8/10)

Версия: 1.1.25.01. Загрузок: 45. Скачать Еще версии программы

Основные возможности

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

Плюсы и минусы

Плюсы:

  • автоматический запуск практически любых операций на ПК;
  • встроенный скриптовый язык;
  • переназначение любых клавиш;
  • поддержка разных устройств для вывода.

Минусы:

  • некоторые сложности в освоении.

Похожие программы

Auto-Clicker. Программа для запоминания и последующего воспроизведения всех действий компьютерной мыши. Записанные действия в ней можно повторять произвольное количество раз, настраивая скорость их воспроизведения.

Macro Recorder. Приложение, которое может автоматизировать все рутинные процессы на компьютере. С его помощью можно создавать макросы, которые будут самостоятельно запускать необходимые программы, выполнять клики мышкой, вводить текст и т. д.

Как пользоваться приложением

Для того чтобы с помощью программы назначить автоматическое выполнение какого-либо действия, нужно создать скрипт. Он представляет собой всплывающее окно с пометкой «Я рогалег». С этой целью используем команду MsgBox, которую можно вызвать любым текстом. Надпись и команду необходимо вписать в любой текстовый редактор, так как сама программа как такового отдельного окна не имеет. Далее сохраняем файл, обязательно указав для него расширение «ahk». Скрипт будет выполнен при нажатии на него двойным щелчком.

 

Выполнение скрипта

При запуске скрипта появится значок «Autohotkey». Нажав на него правой кнопкой, вы сможете выбрать необходимые команды.

 

Выбор команд

Код, который должен автоматически выполняться при запуске скрипта, помещается вверху файла. Идентификаторы нужно указывать для горячих клавиш.Рассмотрим, как это действует, на примере назначения автоматического запуска блокнота Notepad++ при нажатии определенных клавиш.Для начала набираем «#n:: Run notepad++» и сохраняем файл. Дважды щелкаем по нему и набираем команду «Win+n». В области уведомления появится значок, а программа будет запущена при нажатии указанной комбинации клавиш.В команде значок «#n» определяет кнопки, «::» - разделяет обозначения самих клавиш от команд. Остальные базовые кнопки обозначаются таким образом:

 

Обозначения кнопок

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

softikbox.com

Hotkeys -Autohotkey

Горячие клавиши иногда называют быстрыми клавишами из-за их способности без труда активировать операции(например, запускать программу или

Горячие клавиши иногда называют "быстрыми клавишами" из-за их способности без труда активировать операции (например, запускать программу или клавиатурную макрокоманду). В примере, приведенном ниже, горячая клавиша Win+Т настроена на то, чтобы запускать Блокнот (Notepad). Знак решетки [#] обозначает клавишу Windows:

#т:: Run Notepad return

В последней строке команда return служит для того, чтобы завершить работу горячей клавиши. Однако, если горячей клавише нужно выполнить только одну строку, эту строку можно поместить справа от двойного двоеточия, в то время как команда return будет подразумеваться:

#т::Run Notepad

Чтобы с горячей клавишей использовать несколько модификаторов, необходимо поместить их в строке друг за другом. В следующем примере для обозначения Control+Alt используются символы ^!:

^!ы:: Send Sincerely{ASC 044}{enter}John Smith ; В этой строке эмуляция нажатия клавиш относится к активному окну. return

Чтобы задавать горячие клавиши, вы можете использовать следующие символы:

СимволОписаниеclass="ntd">class="ntd">class="ntd">class="ntd">class="ntd">class="ntd">class="ntd">class="ntd">class="ntd">class="ntd">class="ntd">class="ntd">class="ntd">class="ntd">class="ntd">class="ntd">class="ntd">class="ntd">class="ntd">class="ntd">class="ntd">class="ntd">class="ntd">class="ntd">
#Win (клавиша Windows)
!Alt
^Control
+Shift
&Амперсанд ставится между любыми двумя клавишами или кнопками мыши для того, чтобы объединить их в специальную горячую клавишу. Дополнительную информацию см. ниже.
<Использует левую клавишу пары. Например, <!a означает то же самое, что и !a. Однако, в этом случае будет работать только левая клавиша Alt.
>Использует правую клавишу пары. Эта возможность и возможность строкой выше не поддерживаются в Windows 95/98/ME.
<^>!AltGr (alternate graving). Если у вас на клавиатуре вместо правой клавиши Alt находится клавиша AltGr, данное сочетание символов как правило означает AltGr (в Windows не ниже NT/2k/XP). Например:

<^>!ь::MsgBox Вы нажали AltGr+m.<^<!ь::MsgBox Вы нажали LeftControl+LeftAlt+m.

*Групповой символ: запускает горячую клавишу, даже если удерживаются дополнительные модификаторы. Обычно этот символ используется в сочетании с переназначением клавиш или кнопок. Например:

*#c::Run Calc.exe ; здесь горячую клавишу запустит любое из данных сочетаний: Win+C, Shift+Win+C, Ctrl+Win+C, и т.д.*ScrollLock::Run Notepad ; Нажатие Scrolllock запустит эту горячую клавишу, даже если нажат модификатор.

Эта возможность не поддерживается под Windows 95/98/ME.
~В момент запуска обработчика этой горячей клавиши нельзя подавить системную обработку этого действия. В обоих примерах, приведенных ниже, щелчок кнопки мыши, сделанный пользователем, будет послан активному окну, чего не произошло бы при обработке иных горячих клавиш, о которых идёт речь в данной статье:

~RButton::MsgBox Вы щелкнули правой кнопкой мыши.~RButton & C::MsgBox Вы нажали клавишу C, удерживая правую кнопку мыши.

Примечание: специальные горячие клавиши, заменяющие alt-tab, всегда игнорируют эту настройку, и эта возможность не поддерживается под Windows 95/98/ME.
$Префикс $ обычно необходим, если в скрипте используется команда Send для имитации нажатий клавиш, входящих в состав самой горячей клавиши, иначе такая горячая клавиша может запустить сама себя. Действие префикса $ различается в разных операционных системах.В NT4/2k/XP или более поздних версиях Windows: префикс $ использует обработчик клавиатурных прерываний (keyboard hook) для реализации этой горячей клавиши, что мешает команде Send запустить горячую клавишу повторно. Префикс $ является эквивалентом использования команды #UseHook в тексте скрипта где-нибудь выше определения этой горячей клавиши.В Windows 95/98/Me и AutoHotkey v1.0.23+: горячая клавиша запрещается при исполнении потока (thread), по завершении запрет отменяется. В качестве побочного эффекта, если команде #MaxThreadsPerHotkey присвоено значение больше 1, она будет вести себя так, как будто для таких горячих клавиш она установлена на 1.
UPСлово UP может следовать вслед за именем горячей клавиши. В этом случае горячая клавиша сработает при ее отпускании, а не при нажатии. В следующем примере нажатие левой клавиши Windows (LWin) подменяется на нажатие левой клавиши Control (LControl):

*LWin::Send {LControl Down}*LWin Up::Send {LControl Up}

"Up" можно также использовать с обычными горячими клавишами:

^!к Up::MsgBox Вы нажали и отпустили Ctrl+Alt+R.

Данная возможность не работает для кнопок джойстика. Она также требует версию AutoHotkey v1.0.28+ и Windows не ниже NT4/2000/XP.
class="ntable">

(Чтобы ознакомиться с полным списком названий клавиш клавиатуры и кнопок мыши/джойстика, см. соответствующий раздел.)

Метки горячих клавиш можно использовать как обычные метки: вы можете использовать команды Gosub/Goto и задать несколько меток горячих клавиш, чтобы выполнить одну и ту же процедуру. Например:

^Numpad0:: ^Numpad1:: MsgBox При нажатии Control+Numpad0 или Control+Numpad1 появится это сообщение. return

Можно запретить клавишу или комбинацию клавиш для всей системы, если заставить ее бездействовать. В следующем примере будет запрещена правая клавиша Windows:

RWin::return

Возможности горячих клавиш, доступные только в Windows не ниже NT, 2K и XP:

Вы можете задать произвольную комбинацию из двух клавиш (кроме кнопок джойстика), если поставите между ними символ "&". В следующем примере для того, чтобы запустить горячую клавишу, удерживая Numpad0, нажмите вторую клавишу:

Numpad0 & Numpad1::MsgBox Вы нажали Numpad1, удерживая Numpad0. Numpad0 & Numpad2::Run Notepad

В приведенном примере клавиша Numpad0 становится префиксной клавишей. Для префиксных клавиш также можно задать выполнение собственных операций, как показано в следующем примере, однако эти операции будут запущены только после того, как такая клавиша уже отпущена, и если в тот момент, когда вы начали ее нажимать, не были нажаты другие клавиши:

Numpad0::WinMaximize A ; Активное окно развертывается до максимального размера.

Прокрутка колесика мыши назад и вперед также может стать горячей клавишей, как в этих примерах:

MButton & WheelDown::MsgBox Вы повернули колесико мыши на себя, удерживая среднюю кнопку. ^!WheelUp::MsgBox Вы повернули колесико мыши от себя, удерживая Control+Alt.

Еще одной функцией является возможность задавать клавишам Numlock, Capslock, и Scrolllock режимы AlwaysOn или AlwaysOff. Например:

SetNumlockState AlwaysOn

Встроенные горячие клавиши Windows, такие, как Win-E (#e) и Win-R (#r), можно по отдельности отменить, просто задав им выполнение какой-нибудь операции в скрипте. Чтобы получить дополнительную информацию, см. соответствующий раздел.

Замена для Alt-Tab: AltTab и ShiftAltTab - специальные команды, которые распознаются только тогда, когда используются с горячими клавишами. Они позволяют вам создавать альтернативные пути для переключения между программами. Например, если следующий скрипт активен, удерживайте левую клавишу Alt нажатой и вращайте колесико мыши в любом направлении, чтобы продвигаться взад-вперед по меню:

LAlt & WheelDown::AltTab LAlt & WheelUp::ShiftAltTab

Подобным образом можно полностью заменить Alt-Tab колесиком мыши. При нажатии кнопки появится меню, навигация по которому будет осуществляться вращением колесика:

MButton::AltTabMenu WheelDown::AltTab WheelUp::ShiftAltTab

Чтобы без труда переключаться между программами правой рукой на клавиатуре, попытайтесь сделать следующее:

RControl & RShift::AltTab ; Удерживая right-control, нажимайте right-shift, чтобы двигаться вперед. RControl & Enter::ShiftAltTab ; Не отпуская right-control, нажмите Enter чтобы двигаться в обратном порядке.

Команды Alt-tab:

AltTab: если меню отображено на экране, проходит по нему вперед. В противном случае, если горячая клавиша представляет собой &-комбинацию из двух клавиш, вызывает меню. В остальных случаях не делает ничего.

ShiftAltTab: те же действия, что и в предыдущем пункте, только проходит по меню назад.

AltTabAndMenu: если меню отображено на экране, проходит по нему вперед. В противном случае, вызывает меню.

AltTabMenuDismiss: закрывает меню Alt-tab.

Чтобы закрыть меню Alt-Tab, не активизируя выбранное окно, используйте скрипты, приведенные ниже:

;Имитирует нажатие Alt + Tab при нажатии левого Control + CapsLock: LCtrl & CapsLock :: AltTab ;Обработчик нажатия средней кнопки мыши при нажатом Alt ;(так и происходит при нажатии средней кнопки мыши, если открыто меню Alt-Tab): !MButton :: IfWinExist ahk_class #32771 ; условие, что меню alt-tab открыто Send !{Escape}{Alt up} ; эмулирует нажатие Escape, что и убирает меню Alt-Tab return

Соглсно первой строке скрипта нажатие Ctrl + CapsLock приводит к появлению меню Alt-Tab. Поскольку это меню было вызвано не "настоящим" нажатием Alt+Tab, а командой скрипта, его невозможно убрать просто любым щелчком мыши или нажатием любой клавиши. Объясняется это тем, что меню "принадлежит" другому процессу (порожденному программой AutoHotkey). Вот здесь и может оказаться полезным код обработчика нажатия средней кнопки мыши (!MButton ::), который убирает это меню.

!MButton :: IfWinExist ahk_class #32771 Send {Escape} return

Здесь обработчик нажатия средней кнопки мыши убирает меню Alt-Tab, вызванную "настоящим" нажатием Alt+Tab. Безусловно, в данной ситуации это меню можно убрать и без такого обработчика (например, тем же самым нажатием средней кнопки мыши). Однако, при наличии обработчика щелчок средней кнопки мыши получает и обрабатывает исключительно программа AutoHotkey, а не то окно, которое в этот момент находится под указателем мыши (для этого окна щелчка существовать не будет, что может быть по каким-то причинам удобно для пользователя).

В настоящее время все операции Alt-Tab должны быть присвоены непосредственно горячим клавишам, как показано в примерах выше (т.е. их нельзя использовать как самостоятельные команды). Обратите внимание, что присутствие меню Alt-Tab на экране может быть обнаружено при помощи IfWinExist ahk_class #32771.

Чтобы получить дальнейшее представление о том, как с наибольшей эффективностью использовать вашу клавиатуру, мышь и джойстик, см. соответствующие разделы.

Некоторые замечания по горячим клавишам

Для каждой клавиши на цифровой клавиатуре в зависимости от состояния клавиши Numlock можно определить запуск двух различных процедур горячих клавиш. Или запуск одной и той же процедуры вне зависимости от режима клавиши Numlock. Например:

NumpadEnd:: Numpad1:: MsgBox, Эта горячая клавиша запускается вне зависимости от того, включен ли Numlock. return

Если тильда (~) хоть раз будет использована как префикс, все клавиши всегда будут посылаться в активное окно. Например, в обеих из приведенных ниже горячих клавишах активное окно получит все правые клики, даже если только в одном определении есть тильда:

~RButton & LButton::MsgBox Вы нажали левую клавишу мыши, удерживая при этом правую в нажатом положении. RButton & WheelUp::MsgBox Вы повернули вперед колесо мыши, удерживая при этом правую клавишу в нажатом положении.

Команда Suspend может временно запретить все горячие клавиши, кроме тех, которые вы исключили.

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

Горячие клавиши джойстика в настоящее время не поддерживают модификаторы, такие, как ^ (Control) и # (Win). Однако, чтобы воспроизвести этот эффект, вы можете использовать команду GetKeyState, как показано в примере, приведенном ниже:

Joy2:: if not GetKeyState("Control") ; Не нажата ни правая, ни левая клавиша Control. return ; т.е. ничего не предпринимать. MsgBox Вы нажали Joy2, удерживая при этом клавишу Control в нажатом положении. return

Программа является псевдо-многопоточной, что позволяет запускать новую горячую клавишу, даже если процедура предыдущей горячей клавиши еще до конца не отработала. Например, можно запустить другие горячие клавиши, в то время как текущая горячая клавиша выводит на экран MsgBox.

Теги страницы:

ahk-wiki.ru

FormatTime -Autohotkey

Преобразует метку времени формата YYYYMMDDHh34MISS в указанный формат даты/времени.

Преобразует метку времени формата YYYYMMDDHh34MISS в указанный формат даты/времени.

FormatTime, OutputVar [, YYYYMMDDHh34MISS, Format]

Параметры

class="ntd"> class="ntd"> class="ntd"> class="ntd"> class="ntd"> class="ntd">
OutputVarИмя переменной, куда будет сохранён результат.
YYYYMMDDHh34MISSОставьте этот параметр пустым, чтобы использовать текущие локальные дату и время. Иначе укажите метку времени в формате YYYYMMDDHh34MISS либо целиком, либо её начальную часть. Если дата и/или время заданы с ошибкой — например, 29 февраля для невисокосного года — дата и/или время будут опущены из OutputVar. Хотя поддерживаются только годы между 1601 и 9999, но часть метки, относящаяся к времени, будет отформатирована правильно и для более ранних лет, если время задано правильно.

Прим. переводчика — элементы формата YYYYMMDDHh34MISS:

YYYY — год, 4 цифрыMM — месяц, 2 цифры (01-12)DD — день месяца, 2 цифры (01-31)Hh34 — час в 24-часовом формате, 2 цифры (00-23)MI — минуты, 2 цифры (00-59)SS — секунды, 2 цифры (00-59)

FormatЕсли опущен, будет использоваться "длинный" формат даты и времени, соответствующий локали текущего пользователя. Например: 4:55 27 ноября 2004 г.

Иначе укажите один или несколько форматов из списка ниже, с любым количеством пробелов или знаков препинания между ними (запятые экранировать не нужно). Например: M/d/yyyy h:mm tt (заметьте, что M должна быть в верхнем регистре).

class="ntable">

Форматы даты (чувствительны к регистру)

class="ntd"> class="ntd"> class="ntd"> class="ntd"> class="ntd"> class="ntd"> class="ntd"> class="ntd"> class="ntd"> class="ntd"> class="ntd"> class="ntd"> class="ntd"> class="ntd"> class="ntd"> class="ntd"> class="ntd"> class="ntd"> class="ntd"> class="ntd"> class="ntd"> class="ntd"> class="ntd"> class="ntd">
dДень месяца без нуля в начале (1 - 31).
ddДень месяца с нулём в начале (01 - 31).
dddСокращённое название дня недели (например, Пн) на языке текущего пользователя.
ddddПолное название дня недели (например, Понедельник) на языке текущего пользователя.
MМесяц без нуля в начале (1 - 12).
MMМесяц с нулём в начале (01 - 12).
MMMСокращённое название месяца (например, Янв) на языке текущего пользователя.
MMMMПолное название месяца (например, Январь) на языке текущего пользователя.
yГод без века, без нуля в начале (0 - 99).
yyГод без века, с нулём в начале (00 - 99).
yyyyГод с веком. Например: 2005.
ggПериод/эра для локали текущего пользователя (будет пустым, если таковые отсутствуют).
class="ntable">

Форматы времени (чувствительны к регистру)

class="ntd"> class="ntd"> class="ntd"> class="ntd"> class="ntd"> class="ntd"> class="ntd"> class="ntd"> class="ntd"> class="ntd"> class="ntd"> class="ntd"> class="ntd"> class="ntd"> class="ntd"> class="ntd"> class="ntd"> class="ntd"> class="ntd"> class="ntd">
hЧасы без нуля в начале; 12-часовой формат (1 - 12).
hhЧасы с нулём в начале; 12-часовой формат (01 - 12).
HЧасы без нуля в начале; 24-часовой формат (0 - 23).
HHЧасы с нулём в начале; 24-часовой формат (00 - 23).
mМинуты без нуля в начале (0 - 59).
mmМинуты с нулём в начале (00 - 59).
sСекунды без нуля в начале (0 - 59).
ssСекунды с нулём в начале (00 - 59).
tОдносимвольный маркёр времени, такой как A или P (зависит от локали).
ttМногосимвольный маркёр времени, такой как AM или PM (зависит от локали).
class="ntable">

Следующие форматы должны использоваться отдельно, т.е. без каких-либо других форматов или другого текста в параметре Format. Эти форматы нечувствительны к регистру.

class="ntd"> class="ntd"> class="ntd"> class="ntd"> class="ntd"> class="ntd"> class="ntd"> class="ntd"> class="ntd"> class="ntd"> class="ntd"> class="ntd"> class="ntd"> class="ntd"> class="ntd"> class="ntd"> class="ntd"> class="ntd">
(Пусто)Оставьте параметр Format пустым, чтобы получить время, за которым следует длинная дата. Например, 4:55 27 ноября 2004 г.
TimeВремя в локали текущего пользователя, например, 5:26.
ShortdateКороткая дата в локали текущего пользователя, например, 29.02.04.
LongDateДлинная дата в локали текущего пользователя, например, 23 апреля 2004 г.
YearMonthГод и месяц в локали текущего пользователя, например, Февраль 2004 г.
YDayДень года без нулей в начале (1 - 366).
YDay0День года с нулями в начале (001 - 366).
WDayДень недели (1 - 7). 1 соответствует воскресенью.
YWeekПолный год и неделя в стандарте ISO 8601. Например, 200453. Если четыре или более дней недели, содержащей 1 января, приходится уже на новый год, она считается неделей 1. Иначе она считается последней неделей старого года,а первой неделей нового будет следующая за ней. Следовательно, 4 января и первый четверг января всегда находятся в неделе 1.
class="ntable">

Добавочные опции

Нижеследующие опции можно указывать вместе с параметром YYYYMMDDHh34MISS, непосредственно после метки времени (если метка отсутствует, их можно использовать без неё). В следующем примере обратите внимание на отсутствие запятых между последними четырьмя словами:

FormatTime, OutputVar, 20040228 LSys D1 D4

R: Обратный порядок. Поместить дату перед временем (имеет смысл только при пустом параметре Format).

Ln: Если эта опция отсутствует, используется локаль текущего пользователя. Чтобы использовать системную локаль, укажите LSys. Чтобы использовать какую-либо конкретную локаль, укажите букву L и сразу за ней шестнадцатеричный или десятичный идентификатор локали (LCID). Информацию о том, как получить LCID,ищите на www.microsoft.com по фразе Locale Identifiers.

Dn: Опции для даты. Поставьте вместо n одно из следующих чисел:

  • 0: Использовать опции по умолчанию. Это также приведёт к использованию короткой даты.
  • 1: Использовать короткую дату (имеет смысл только при пустом параметре Format; несовместимо с 2 и 8).
  • 2: Использовать длинную дату (имеет смысл только при пустом параметре Format; несовместимо с 1 и 8).
  • 4: Использовать альтернативный календарь (если есть).
  • 8: Использовать формат Year-Month (имеет смысл только при пустом параметре Format; несовместимо с 1 и 2). Требует Windows 2000 или более позднюю.
  • 0x10: Добавить метки для чтения слева направо. Требует Windows 2000 или более позднюю.
  • 0x20: Добавить метки для чтения справа налево. Требует Windows 2000 или более позднюю.
  • 0x80000000: Использовать системный формат даты по умолчанию, игнорируя настройки пользователя.
  • 0x40000000: Использовать для конвертации строк системную кодовую страницу ANSI вместо кодовой страницы локали.
Tn: Опции для времени. Поставьте вместо n одно из следующих чисел:
  • 0: Использовать опции по умолчанию. Это также приведёт к показу минут и секунд.
  • 1: Опустить минуты и секунды.
  • 2: Опустить секунды.
  • 4: Опустить маркёр времени (например, AM/PM).
  • 8: Всегда использовать 24-часовой формат.
  • 12: Комбинация двух предыдущих опций.
  • 0x80000000: Использовать системный формат времени по умолчанию, игнорируя настройки пользователя.
  • 0x40000000: Использовать для конвертации строк системную кодовую страницу ANSI вместо кодовой страницы локали.

Замечание: Dn и Tn можно повторять, чтобы задействовать более одной опции, как в этом примере: FormatTime, OutputVar, 20040228 D2 D4 T1 T8

Примечания

Буквы и числа, которые должны перейти из Format в OutputVar без изменений, нужно заключать в одиночные кавычки, как в этом примере: 'Дата:' MM/dd/yy 'Время:' hh:mm:ss tt

Напротив, не буквенно-цифровые символы, такие как пробел, табуляция, перевод строки (`n), наклонная черта, двоеточие, запятая и другие знаки препинания не требуют заключения в кавычки. Исключением является сама одиночная кавычка: чтобы передать её литерально, поставьте четыре одиночных кавычки (''''), или только две, если она уже находится внутри внешней пары кавычек.

Если Format содержит элементы даты и времени вместе, они не должны идти вперемешку. Другими словами, строка должна делиться на две половины: времени и даты. Например, строка "hh yyyy mm" не приведёт к ожидаемому результату, поскольку элемент даты стоит между двумя элементами времени.

Если Format содержит число месяца (в формате d или dd), а за ним следует полное название месяца (MMMM), для месяца используется форма родительного падежа (если в языке есть такая форма).

Если Format содержит более 2000 знаков, OutputVar будет пустой.

Сложение и вычитание дат и времён может осуществляться через EnvAdd и EnvSub.

Как можно конвертировать в обратном направлении, т.е. из форматированной даты/времени в формат YYYYMMDDHh34MISS, смотрите здесь: www.autohotkey.com/forum/topic20405.htmlphp

Примеры

FormatTime, TimeString MsgBox Текущие время и дата (сначала время): %TimeString% FormatTime, TimeString, R MsgBox Текущие время и дата (сначала дата): %TimeString% FormatTime, TimeString,, Time MsgBox Текущее время: %TimeString% FormatTime, TimeString, T12, Time MsgBox Текущее время в 24-часовом формате: %TimeString% FormatTime, TimeString,, LongDate MsgBox Текущая дата (длинный формат): %TimeString% FormatTime, TimeString, 20050423220133, dddd MMMM d, yyyy hh:mm:ss tt MsgBox Указанные дата и время, после форматирования: %TimeString% FormatTime, TimeString, 200504, 'Месяц': MMMM`n'День': dddd MsgBox %TimeString% FormatTime, YearWeek, 20050101, YWeek MsgBox 1 января 2005 находится в неделе номер %YearWeek% ; Узнать время изменения файла. FileSelectFile, FileName, 3,, Выберите файл if FileName = ; Файл не был выбран. return FileGetTime, FileTime, %FileName% FormatTime, FileTime, %FileTime% ; Поскольку последний параметр опущен, ; используются длинные дата и время. MsgBox Выбранный файл последний раз был изменён %FileTime% ; Следующая ниже функция преобразует заданное число секунд в часы, минуты ; и секунды (формат hh:mm:ss). MsgBox % FormatSeconds(7384) ; 7384 = 2 часа + 3 минуты + 4 секунды. ; Это даёт 2:03:04. FormatSeconds(NumberOfSeconds) ; Преобразует заданное число секунд ; к формату hh:mm:ss. { time = 19990101 ; Полночь произвольной даты. time += %NumberOfSeconds%, seconds FormatTime, mmss, %time%, mm:ss return NumberOfSeconds//3600 ":" mmss ; Такой метод используется для ; поддержки случаев, когда количество ; секунд превышает 24 часа. }

Теги страницы:

ahk-wiki.ru

Functions -Autohotkey

Функция похожа на подпрограмму (Gosub), отличаясь от нее только способностью принимать параметры (входные данные) от вызывающего оператора. Кроме того, функция при желании может возвращать значения вызывающему оператору. Рассмотрим приведенный ниже пример простой функции, принимающей два числа и возвращающей их сумму:

Содержание

Введение и простые примеры

Функция похожа на подпрограмму (Gosub), отличаясь от нее только способностью принимать параметры (входные данные) от вызывающего оператора. Кроме того, функция при желании может возвращать значения вызывающему оператору. Рассмотрим приведенный ниже пример простой функции, принимающей два числа и возвращающей их сумму:

Add(x, y) { return x + y ; "return" ожидает выражение }

Приведенный выше пример называется определением функции, так как создает функцию под названием "Add" (нечувствительно к регистру) и определяет, что для вызова этой функции необходимо задать ровно два параметра (x и y). Чтобы вызвать функцию, присвойте ее результат переменной с оператором :=, как показано в примере:

Var := Add(2, 3) ; Число 5 будет сохранено в Var.

Функцию можно также вызвать, не сохраняя возвращаемое значение:

Add(2, 3)

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

Поскольку вызов функции является выражением, не следует заключать в знаки процента имена переменных в списке ее параметров. И напротив, буквальные строки необходимо заключать в двойные кавычки. Например:

if InStr(MyVar, "fox") MsgBox Переменная MyVar содержит слово fox.

И, наконец, функции можно вызывать в параметрах любой команды (кроме параметров OutputVar и InputVar, таких, как в команде StringLen). Однако в параметрах, не поддерживающих выражения, обязательно нужно использовать префикс "%":

MsgBox % "Ответ: " . Add(3, 2)

Параметры

При определении функции ее параметры перечисляются в круглых скобках рядом с именем функции (между именем функции и открывающей скобкой не должно быть пробелов). Если функция не должна принимать никаких параметров, оставьте скобки пустыми. Например: GetCurrentTimestamp().

Для функции параметры по существу являются тем же самым, что и локальные переменные, кроме случаев, когда они определены как ByRef:

Swap(ByRef Left, ByRef Right) { temp := Left Left := Right Right := temp }

В примере, приведенном выше, в результате использования ByRef каждый параметр становится псевдонимом для переменной, переданной от вызывающего оператора. Другими словами, как сам параметр, так и переменная вызывающего оператора ссылаются на одно и то же содержимое памяти, что позволяет функции Swap изменять переменные вызывающего оператора, перемещая содержимое параметра Left в параметр Right и наоборот.

И напротив, если бы ByRef в этом примере не использовался, параметры Left и Right были бы копиями переменных вызывающего оператора, и функция Swap не имела бы должного эффекта.

Поскольку команда return может возвращать только одно значение, ByRef можно использовать для того, чтобы посылать дополнительные результаты обратно оператору, вызывающему функцию. Это достигается при передаче вызывающим оператором переменной (обычно пустой), в которой функция сохранит значение.

Явное ограничение: параметру функции с ключевым словом ByRef невозможно передать переменную окружения.

Опциональные параметры [v1.0.35+]

При определении функции один или несколько параметров можно пометить как опциональные. Для этого к параметру добавляется знак равенства и значение по умолчанию. В примере, приведенном ниже, параметр Z помечен как опциональный:

Add(X, Y, Z = 0) { return X + Y + Z }

Когда в примере вызывающий оператор передает функции три параметра, значение по умолчанию игнорируется. Однако, если передано только два параметра, параметру Z автоматически присваивается значение 0.

Нельзя поставить опциональные параметры в середину списка параметров. Другими словами, все параметры, расположенные справа от первого опционального параметра, также должны быть опциональными.

Значение параметра по умолчанию должно быть одним из следующих: true, false, буквальное целое число, буквальное число с плавающей запятой или буквальная пустая строка ("").

Локальные переменные

Все переменные, которые упомянуты или созданы внутри функции, являются локальными по умолчанию (кроме встроенных переменных, таких, как Clipboard, ErrorLevel или A_TimeIdle). Содержимое каждой локальной переменной могут видеть только команды, используемые внутри функции. Следовательно, локальная и глобальная переменные могут иметь одно имя, но разное содержание. И наконец, каждый раз при вызове функции локальная переменная первоначально не имеет значения.

Глобальные переменные: чтобы сослаться на существующую глобальную переменную внутри функции (или создать новую глобальную переменную), перед использованием объявите эту переменную глобальной. Например:

LogToFile(TextToLog) { global LogFileName ; Эта глобальная переменная получила значение вне данной функции. FileAppend, %TextToLog%`n, %LogFileName% }

Если функции необходимо создать или сослаться на большое количество глобальных переменных, можно объявить все переменные функции глобальными (кроме ее параметров). Для этого необходимо поместить в первой строке слово "global" или объявить в ней локальную переменную. Например:

Setdefaults() { global ; Это слово можно опустить, если первая строка будет выглядеть следующим образом: "local MyVar". Var := 33 ; Присваивает глобальной переменной число 33, при необходимости создав эту переменную. local x, y, z ;В этом режиме локальные переменные должны быть явно объявлены, иначе они будут считаться глобальными. ... }

Глобальный режим также можно использовать в функции для создания глобального массива, как например, цикл, присваивающий значения Array%A_Index%.

Статические переменные: чтобы сохранить значение переменной между вызовами, ее можно объявить статической. Например:

LogToFile(TextToLog) { static LineCount LineCount += 1 ; Счетчик поддерживается локально (его значение сохраняется между вызовами). global LogFileName FileAppend, %LineCount%: %TextToLog%`n, %LogFileName% }

Подразумевается, что статические переменные всегда локальны. Кроме того, единственный способ увидеть, что статическая переменная используется впервые - это проверить, имеет ли она значение.

Дополнительная информация о локальных и глобальных переменных:

Несколько переменных можно объявить в одной и той же строке, разделив их запятыми, как показано в примере:

global LogFileName, MaxRetries static TotalAttempts, PrevResult

Поскольку слова local, global и static обрабатываются немедленно после запуска скрипта, их нельзя выполнить с помощью условного оператора. Другими словами, использование слов local, global или static внутри блока IF или ELSE вступает в силу безоговорочно. Кроме того, на сегодняшний день невозможно объявить динамическую переменную, как, например global Array%i%.

Внутри функции ссылка на динамическую переменную (напр.: Array%i%) всегда разрешается в локальную переменную, если переменная с таким именем существует. В противном случае используется глобальная переменная. Если не существует ни локальной, ни глобальной переменной, будет создана локальная переменная (если не действует глобальный режим).

Таким образом, функция может создать глобальный массив вручную (например, так: Array%i% := A_Index) только в глобальном режиме.

Для команд, создающих массивы (таких, как StringSplit), полученный в результате массив будет локальным, если не действует глобальный режим или если первый элемент массива объявлен как локальная переменная (сказанное также верно, если передан один из параметров функции, даже если этот параметр ByRef). И наоборот, если первый элемент был объявлен глобальным, будет создан глобальный массив. Первым элементом для команды StringSplit является ArrayName0. Для других создающих массивы команд, таких, как WinGet List, первым элементом является ArrayName (т.е. без числа).

Использование директивы #Include для распределение функций между множественными скриптами

Для загрузки функций из внешнего файла можно использовать директиву #Include (даже в начале скрипта).

Пояснения: когда скрипт в процессе исполнения встречает определение функции, он немедленно пропускает его и возобновляет исполнение со строки после закрывающей скобки. Следовательно, выполнение никогда не может начаться с подобной функции, а присутствие одной или нескольких функций на самом верху скрипта не влияет на секцию авто-выполнения.

Схема быстрой булевой оценки

Если операторы AND и OR используются внутри выражения, применяется схема быстрой оценки (вне зависимости от того, есть ли вызовы функции). При этой схеме не оцениваются части выражения, не влияющие на конечный результат. Рассмотрим пример, иллюстрирующий эту мысль:

if (ColorName "" AND not FindColor(ColorName)) MsgBox %ColorName% не может быть найден.

В приведенном примере функция FindColor() никогда не будет вызвана, если переменная ColorName не имеет значений, так как левая часть выражения с оператором AND будет ложной, и, следовательно, его правая часть не сможет изменить конечный результат на истинно.

Очень важно понять, что подобное поведение приводит к тому, что если функция вызвана в правой части выражений с операторами AND или OR, любой побочный эффект, порожденный функцией, такой, как изменение содержимого глобальной переменной, возможно никогда не будет иметь место.

Также следует заметить, что быстрая оценка будет производиться иерархически по вложенным операторам AND и OR. Например, в следующем выражении, если ColorName не имеет значения, будет производиться только крайнее левое сравнение, так как в этом случае левой стороны достаточно, чтобы с уверенностью определить итоговый результат:

if (ColorName = "" OR FindColor(ColorName, Region1) OR FindColor(ColorName, Region2)) break ; Искать нечего, или мы нашли соответствие.

Как показано в примере, приведенном выше, для увеличения производительности затратную (занимающую много времени) функцию, как правило, следует помещать в правую часть выражений с операторами AND или OR. Эту технику можно также использовать, чтобы помешать вызову функции, если один из параметров содержит неподходящее значение (напр., пустую строку).

Использование подпрограмм в функции

Хотя функция не может содержать определений других функций, она может содержать приватные подпрограммы. Как и в случае с другими подпрограммами, используйте команду Gosub для запуска функций и команду Return для возврата (при этом команда Return будет принадлежать команде Gosub, а не функции).

Если функция использует команду Gosub, чтобы перейти к общедоступной подпрограмме (той, что находится за пределами фигурных скобок функции), все переменные будут глобальными, а собственная локальная переменная функции будет недоступна, пока исполняется подпрограмма.

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

Хотя команда Goto, направленная вне функции, игнорируется, функция может перейти (Gosub) к внешней/общедоступной подпрограмме, после чего выполнить команду Goto оттуда.

Функция может содержать подпрограммы для таймеров (timers), меток перехода GUI, пунктов меню и других похожих функций. Это нужно, чтобы заключить подпрограммы в отдельный файл для использования с директивой #Include, что предохраняет их от использования вместе с секцией авто-выполнения скрипта. Однако если функция таких подпрограмм будет вызываться и обычным способом, а не просто служить в качестве контейнера для подпрограмм, то эти подпрограммы должны использовать только статические и глобальные переменные (не локальные). Причиной этого служит то, что поток подпрограммы, прерывающий поток вызова функции (или наоборот) сможет изменять значения локальных переменных, обнаруженных прерванным потоком. Кроме того, каждый раз, когда функция возвращается к своему вызывающему оператору, все локальные переменные функции очищаются от значений, чтобы освободить их память.

Общие замечания

Если поток выполнения, действующий внутри функции, достигает закрывающей скобки функции до того, как дойдет до команды Return, функция заканчивается и возвращает вызывающему оператору пустое значение (пустую строку). Пустое значение возвращается и в тех случаях, когда функция явно опускает параметры команды Return.

Если функция использует команду Exit для завершения текущего потока, оператор, вызывающий функцию, не получает никакого значения. Например, если Add() использует команду Exit, оператор Var := Add(2, 3) оставит переменную Var без изменений. То же самое происходит, если функция приводит к ошибке времени исполнения, такой, как например, запуск несуществующего файла (если параметр UseErrorLevel не действует).

Функция может изменить значение переменной ErrorLevel, чтобы возвратить дополнительное значение, более легкое для запоминания.

Чтобы вызвать функцию с одним или несколькими пустыми значениями (пустыми строками), используйте пустую пару кавычек, как показано в примере: FindColor(ColorName, "")

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

Оператор, вызывающий функцию, может передать ей несуществующую переменную или элемент массива, что удобно, если функция ждет, что соответствующим параметром будет параметр ByRef. Например, вызов GetNextLine(BlankArray%i%) автоматически создаст переменную BlankArray%i% (какой она будет, локальной или глобальной, зависит от местоположения вызывающего оператора и от того, будет ли действовать глобальный режим.)

Команда ListVars может отражать локальные переменные вместе с их содержимым, что полезно при отладке скриптов.

Известные ограничения: функция может рекурсивно вызвать сама себя, однако если она передаст одну из своих локальных переменных или параметров самой себе, используя ByRef, параметр ByRef нового уровня будет ссылаться на свою переменную, а не на переменную предыдущего уровня. Подобная проблема не возникнет, если функция передаст себе глобальную переменную или параметр ByRef, ссылающийся на глобальную или локальную переменную другой функции.

Правила присваивания имен: возможно, вы увидите, что сложные функции более удобны для чтения и эксплуатации, если присвоить их специальным переменным отличительные префиксы. Например, если присвоить каждому параметру в списке параметров функции лидирующую "p" или "p_", этот тип параметров будет легче определить с первого взгляда, особенно, если в функции используется несколько десятков локальных переменных. Подобным образом, префикс "r" или "r_" можно использовать для параметров ByRef, а "s" или "s_" - для статических переменных.

Встроенные функции

Опциональные параметры в конце списка параметров встроенной функции можно совсем опустить. Например, функция WinExist("Untitled - Notepad") действительна, поскольку остальные три параметра этой функции будут считаться пустыми.

Встроенная функция будет замещена, если в скрипте задана собственная функция с тем же именем. Например, в скрипте может быть собственная функция WinExist(), которая будет вызвана вместо стандартной функции.

Внешние функции, постоянно хранящиеся в DLL-файлах, можно вызвать с помощью команды DllCall().

Все встроенные функции требуют версии 1.0.34 и выше, кроме функций WinActive и WinExist, которые требуют версии 1.0.31 и выше.

Часто используемые функции

FileExist(FilePattern): возвращает пустое значение (пустую строку), если FilePattern не существует. Иначе, возвращает строку атрибутов (подмножество "RASHNDOCT") первого подходящего файла или папки. Параметром FilePattern может быть точное имя файла или папки, или он может содержать групповой символ (* или ?). Поскольку пустая строка рассматривается как "ложь", возврат функции может всегда использоваться как квази-булево значение. Например, оператор if FileExist("C:\My File.txt") будет истинным, если файл существует, и ложным иначе. Подобным образом, оператор if InStr(FileExist("C:\My Folder"), "D") будет истинным, только если файл существует и является директорией. Если не указан абсолютный путь, то предполагается, что параметр FilePattern находится в переменной A_WorkingDir. Похожие команды: IfExist и FileGetAttrib.

GetKeyState(KeyName [, "P" or "T"]): в отличие от команды GetKeyState, которая возвращает D, когда клавиша нажата и U, когда она отпущена, данная функция возвращает истину (1), если клавиша нажата и ложь (0), если опущена. Если параметр KeyName недействителен, возвращается пустая строка. См. о других возвращаемых значениях и об инструкциях по применению в описании команды GetKeyState.

InStr(Haystack, Needle [, CaseSensitive?, StartingPos]): возвращает позицию первого вхождения строки Needle в строку Haystack. В отличие от команды StringGetPos, позиция 1 является первым символом, так как 0 - синоним "false" и является интуитивным индикатором "не найдено". Если параметр CaseSensitive опущен или ложен, поиск не чувствителен к регистру; иначе, регистр должен точно совпадать. Если параметр StartingPos опущен, то по умолчанию он равен 1 (начало строки Haystack). Иначе, задайте 2, чтобы начать со второго символа строки Haystack, 3 - с третьего, и т.д. Если параметр StartingPos больше, чем количество символов Haystack, возвращается 0. Если StartingPos равен 0, поиск проводится в обратном порядке (справа налево), с тем, чтобы найти соответствие, находящееся правее остальных. Вне зависимости от значения параметра StartingPos, возвращаемая позиция всегда соотносится с первым символом Haystack. Например, позиция строки "abc" в строке "123abc789" всегда 4. Похожие команды: IfInString и StringGetPos.

StrLen(String): возвращает длину String (строки). Если String является переменной, которой ранее было задано значение ClipboardAll, возвращается полный размер строки. Похожая команда: StringLen.

WinActive("WinTitle" [, "WinText", "ExcludeTitle", "ExcludeText"]): возвращает уникальный идентификатор активного окна, если оно соответствует заданным условиям. Если соответствия нет, функция возвращает 0. Так как все числа, не равные нулю, рассматриваются как "истина", оператор if WinActive("WinTitle") верен, если окно WinTitle активно. См. описание команды IfWinActive.

WinExist("WinTitle" [, "WinText", "ExcludeTitle", "ExcludeText"]): возвращает уникальный идентификатор первого совпадающего окна (0, если совпадения нет). Так как все числа, не равные нулю, рассматриваются как "истина", оператор if WinExist("WinTitle") верен, если окно WinTitle существует. См. описание команды IfWinExist.

Прочие функции

Asc(String): возвращает для первого символа в параметре String код ASCII (число в диапазоне от 1 до 255). Если String не имеет значения, возвращается 0.

Chr(Number): возвращает символ, соответствующий коду ASCII, заданному параметром Number. Если Number не принадлежит диапазону от 1 до 255 включительно, возвращается пустая строка. Часто используемые коды ASCII - 9 (табуляция), 10 (перевод строки), 13 (возврат каретки), 32 (пробел), 48-57 (0-9), 65-90 (A-Z) и 97-122 (a-z).

IsLabel(LabelName) [в версиях от 1.0.38 и выше]: возвращает число, не равное нулю, если параметр LabelName существует в скрипте в виде подпрограммы, горячей клавиши или строки автозамены (не включайте в параметр LabelName конечную запятую). Например, оператор if IsLabel(VarContainingLabelName) верен, если метка существует, и ложен иначе. Функция полезна для того, чтобы избежать ошибок времени исполнения при определении динамической метки в таких командах, как Gosub, Hotkey, Menu и Gui.

OnMessage(MsgNumber [, "FunctionName"]): см. описание команды OnMessage.

VarSetCapacity(UnquotedVarName [, RequestedCapacity]): увеличивает ёмкость переменной или освобождает её память. См. описание команды VarSetCapacity.

Общая математика

Примечание: обычно, если одним из входящих параметров является нечисловое значение, математические функции возвращают пустое значение (пустую строку).

Abs(Number): возвращает абсолютное значение параметра Number. Возвращаемое значение принадлежит тому же типу, что и Number (целое число или число с плавающей запятой).

Ceil(Number): возвращает параметр Number, округленный до ближайшего целого числа в большую строну (без суффикса .00). Например, Ceil(1.2) равно 2, а Ceil(-1.2) равно -1.

Exp(N): возвращает e (приблизительно 2.71828182845905), возведенную в степень N. Параметр N может быть отрицательным и содержать десятичную точку. Чтобы возвести в степень другие числа (не равные e), используйте оператор **.

Floor(Number): возвращает параметр Number , округленный до ближайшего целого числа в меньшую строну (без суффикса .00). Например, Floor(1.2) равно 1, а Floor(-1.2) равно -2.

Log(Number): возвращает логарифм (с основанием 10) параметра Number. Формат результата - число с плавающей запятой. Если параметр Number отрицательный, возвращается пустая строка.

Ln(Number): возвращает натуральный логарифм (с основанием e) параметра Number. Формат результата - число с плавающей запятой. Если параметр Number отрицательный, возвращается пустая строка.

Mod(Dividend, Divisor): возвращает остаток от деления Dividend на Divisor. Знак результата и знак первого параметра всегда совпадают. Например, как mod(5, 3), так и mod(5, -3) возвращают 2, однако mod(-5, 3) и mod(-5, -3) возвращают -2. Если какой-либо из входящих данных является числом с плавающей запятой, результатом также является число с плавающей запятой. Например, mod(5.0, 3) возвращает 2.0, а mod(5, 3.5) возвращает 1.5. Если второй параметр равен нулю, функция возвращает пустой результат (пустую строку).

Round(Number [, N]): если параметр N опущен или равен 0, параметр Number округляется до ближайшего целого числа. Если N - положительное число, Number округляется до N знаков после запятой. Если параметр N отрицательный, Number округляется до N разрядов слева от десятичной точки. Например, Round(345, -1) равно 350, а Round (345, -2) равно 300. В отличие от команды Transform Round, в случае, если параметр N опущен или меньше либо равен нулю, результат не имеет суффикса .000.

Sqrt(Number): возвращает квадратный корень от параметра Number. Формат результата - число с плавающей запятой. Если параметр Number отрицательный, функция возвращает пустой результат (пустую строку).

Тригонометрия

Sin(Number) | Cos(Number) | Tan(Number): возвращает тригонометрические синус/косинус/тангенс параметра Number. Number должен быть выражен в радианах.

ASin(Number): возвращает арксинус (число, синус которого равен параметру Number) в радианах. Если параметр Number меньше -1 или больше 1, функция возвращает пустой результат (пустую строку).

ACos(Number): возвращает арккосинус (число, косинус которого равен параметру Number) в радианах. Если параметр Number меньше -1 или больше 1, функция возвращает пустой результат (пустую строку).

ATan(Number): возвращает арктангенс (число, тангенс которого равен параметру Number) в радианах.

Теги страницы:

ahk-wiki.ru


Смотрите также