Как написать ахк на нажатие клавиши

home icon
Все разделы

comunity icon
Нужна помощь?

Посылает нажатия клавиш и щелчки мыши в активное окно.

Send Keys
SendRaw Keys
SendInput Keys
SendPlay Keys
SendEvent Keys

Параметры

Keys Последовательность посылаемых клавиш. Как и в других командах, запятая перед первым параметром необязательна.

Режим Raw (как есть): Команда SendRaw посылает клавиши в точности как они указаны, т.е. не преобразует {Enter} в нажатие клавиши Enter или ^c в нажатие Control-C и т.п. Чтобы использовать этот режим в командах SendInput, SendPlay или SendEvent, напишите {Raw} в начале посылаемой строки, например: SendInput {Raw}abc.

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

!: Посылает нажатие Alt. Например, команда Send This is text!a пошлёт «This is text» и затем комбинацию Alt+a. Замечание: в некоторых программах !A — не то же самое, что !a. Причина в том, что !A нажимает Alt+Shift+a, в то время как !a нажимает Alt+a. Если сомневаетесь, используйте нижний регистр.

+: Посылает нажатие Shift. Например, Send +abC пошлёт текст «AbC», а Send !+a пошлёт комбинацию Alt+Shift+a.

^: Посылает нажатие Control. Например, ^!a нажмёт Ctrl+Atl+a, Send ^{Home} пошлёт Ctrl+Home. Замечание: в некоторых программах ^A — не то же самое, что ^a, поскольку ^A посылает Ctrl+Shift+a, в то время как ^a посылает Ctrl+a. Если сомневаетесь, используйте нижний регистр.

#: Посылает нажатие Win, т.е. Send #e нажмёт клавишу Windows и, удерживая её, нажмёт клавишу «e».

SendInput и SendPlay [с версии 1.0.43]: SendInput и SendPlay используют тот же синтаксис, что и Send, но работают, как правило, быстрее и более надёжно. Кроме того они буферизуют физические нажатия на клавиши и кнопки мыши, которые происходят во время посылки, что не позволяет нажатиям пользователя смешиваться с теми, которые посылает скрипт. С помощью команды SendMode можно сделать команду Send синонимом SendInput или SendPlay. Более детальное описание каждого из режимов смотрите в разделах SendInput и SendPlay ниже.

SendEvent [с версии 1.0.43]: SendEvent использует для посылки тот же метод, что и команда Send в версиях до 1.0.43. Скорость посылки нажатий задаётся командой SetKeyDelay. По умолчанию, Send является синонимом SendEvent, но может быть сделана синонимом SendPlay или SendInput с помощью команды SendMode.

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

Имя клавиши Результирующее нажатие
{F1} — {F24} Функциональные клавиши. Например, {F12} означает клавишу F12.
{!} !
{#} #
{+} +
{^} ^
{{} {
{}} }
{Enter} ENTER на основной клавиатуре
{Escape} или {Esc} ESCAPE
{Space} Пробел (такое обозначение нужно только для пробелов в начале или конце строки, пробелы в середине могут быть обычными)
{Tab} TAB
{Backspace} или {BS} Backspace
{Delete} или {Del} Delete
{Insert} или {Ins} Insert
{Up} Стрелка вверх на основной клавиатуре
{Down} Стрелка вниз на основной клавиатуре
{Left} Стрелка влево на основной клавиатуре
{Right} Стрелка вправо на основной клавиатуре
{Home} Home на основной клавиатуре
{End} End на основной клавиатуре
{PgUp} Page Up на основной клавиатуре
{PgDn} Page Down на основной клавиатуре
   
{CapsLock} CapsLock (использование команды SetCapsLockState более надёжно в NT/2k/XP)
{ScrollLock} ScrollLock (см. также SetScrollLockState)
{NumLock} NumLock (см. также SetNumLockState)
   
{Control} или {Ctrl} CONTROL (посылается код нейтральной виртуальной клавиши и левый сканкод)
{LControl} или {LCtrl} Левый CONTROL (то же, что CONTROL в Win9x, но в NT/2k/XP будет послан код левой виртуальной клавиши)
{RControl} или {RCtrl} Правый CONTROL
{Control Down} или {Ctrl Down} Нажимает и удерживает CONTROL пока не будет послан {Ctrl Up}. XP/2000/NT: Чтобы удерживать конкретно левый или правый Control, используйте {LCtrl Down} и {LCtrl Up}, {RCtrl Down} и {RCtrl Up}.
   
{Alt} ALT (посылается код нейтральной виртуальной клавиши и левый сканкод)
{LAlt} Левый ALT (то же, что ALT в Win9x, но в NT/2k/XP посылается код левой виртуальной клавиши)
{RAlt} Правый ALT (или AltGr, в зависимости от раскладки клавиатуры)
{Alt Down} Нажимает и удерживает ALT пока не будет послан {Alt Up}. XP/2000/NT: Чтобы удерживать конкретно левый или правый Alt, используйте {LAlt Down} и {LAlt Up}, {RAlt Down} и {RAlt Up}.
   
{Shift} SHIFT (посылает код нейтральной виртуальной клавиши и левый сканкод)
{LShift} Левый SHIFT (то же, что SHIFT в Win9x, но в NT/2k/XP посылается код левой виртуальной клавиши)
{RShift} Правый SHIFT
{Shift Down} Нажимает и удерживает SHIFT пока не будет послан {Shift Up}. XP/2000/NT: Чтобы удерживать конкретно левый или правый Shift, используйте {LShift Down} и {LShift Up}, {RShift Down} и {RShift Up}.
   
{LWin} Левая клавиша Windows
{RWin} Правая клавиша Windows
{LWin Down} Нажимает и удерживает левую клавишу Windows пока не будет послан {LWin Up}
{RWin Down} Нажимает и удерживает правую клавишу Windows пока не будет послан {RWin Up}
   
{AppsKey} Клавиша контекстного меню
{Sleep} Клавиша SLEEP
{ASC nnnnn} Посылает комбинацию Alt с кодом символа (набираемого на цифровой клавиатуре), которая может быть использована для генерации символов, которые не существуют на клавиатуре. Чтобы сгенерировать символы ASCII, используйте коды от 1 до 255. Для символов ANSI (стандарт для большинства языков) используйте коды от 128 до 255, но добавьте в начало 0, например {Asc 0133}.

Для символов Unicode указывайте коды от 256 до 65535 (без нуля в начале). Однако это поддерживается не всеми приложениями. Поэтому для большей совместимости и упрощения посылки длинных строк в Unicode используйте команду Transform Unicode.

{vkXX}
{scYYY}
{vkXXscYYY}
Посылает нажатие, которое имеет код виртуальной клавиши XX и сканкод YYY. Например: Send {vkFFsc159}. Если sc- или vk-часть опущена, вместо неё посылается наиболее подходящее значение.

Значения XX и YYY шестнадцатеричные и обычно могут быть определены через пункт меню View — Key history в главном окне скрипта (это окно открывается через пункт Open в меню значка в трее). См. также раздел «Специальные клавиши» на странице «Список клавиш и кнопок мыши/джойстика».

   
{Numpad0} — {Numpad9} Цифры на цифровой (дополнительной) клавиатуре. Например, {Numpad5} — это цифра 5.
{NumpadDot} Точка на цифровой клавиатуре.
{NumpadEnter} Enter на цифровой клавиатуре.
{NumpadMult} Умножение на цифровой клавиатуре.
{NumpadDiv} Деление на цифровой клавиатуре.
{NumpadAdd} Плюс на цифровой клавиатуре.
{NumpadSub} Минус на цифровой клавиатуре.
   
{NumpadDel} Delete на цифровой клавиатуре.
{NumpadIns} Insert на цифровой клавиатуре.
{NumpadClear} Clear на цифровой клавиатуре (обычно это клавиша ‘5’, когда выключен NumLock).
{NumpadUp} Стрелка вверх на цифровой клавиатуре.
{NumpadDown} Стрелка вниз на цифровой клавиатуре.
{NumpadLeft} Стрелка влево на цифровой клавиатуре.
{NumpadRight} Стрелка вправо на цифровой клавиатуре.
{NumpadHome} Home на цифровой клавиатуре.
{NumpadEnd} End на цифровой клавиатуре.
{NumpadPgUp} Page Up на цифровой клавиатуре.
{NumpadPgDn} Page Down на цифровой клавиатуре.
   
{Browser_Back} 2000/XP/Vista+: Выбор кнопки «Назад» в браузере.
{Browser_Forward} 2000/XP/Vista+: Выбор кнопки «Вперед» в браузере.
{Browser_Refresh} 2000/XP/Vista+: Выбор кнопки «Обновить» в браузере.
{Browser_Stop} 2000/XP/Vista+: Выбор кнопки «Остановить» в браузере.
{Browser_Search} 2000/XP/Vista+: Выбор кнопки «Поиск» в браузере.
{Browser_Favorites} 2000/XP/Vista+: Выбор кнопки «Избранное» в браузере.
{Browser_Home} 2000/XP/Vista+: Запустить браузер и перейти на домашнюю страницу.
{Volume_Mute} 2000/XP/Vista+: Выключить/включить главный регулятор звука. Обычно эквивалентно команде SoundSet, +1, , mute
{Volume_Down} 2000/XP/Vista+: Уменьшить громкость на главном регуляторе. Обычно эквивалентно SoundSet -5
{Volume_Up} 2000/XP/Vista+: Увеличить громкость на главном регуляторе. Обычно эквивалентно SoundSet +5
{Media_Next} 2000/XP/Vista+: Выбор следующего трека в медиа-проигрывателе.
{Media_Prev} 2000/XP/Vista+: Выбор предыдущего трека в медиа-проигрывателе.
{Media_Stop} 2000/XP/Vista+: Остановка медиа-проигрывателя.
{Media_Play_Pause} 2000/XP/Vista+: Пауза/продолжение в медиа-проигрывателе.
{Launch_Mail} 2000/XP/Vista+: Запуск приложения электронной почты.
{Launch_Media} 2000/XP/Vista+: Запуск медиа-проигрывателя.
{Launch_App1} 2000/XP/Vista+: Запуск пользовательского приложения 1.
{Launch_App2} 2000/XP/Vista+: Запуск пользовательского приложения 2.
   
{PrintScreen} PrintScreen
{CtrlBreak} Ctrl+Break
{Pause} Pause
   
{Click [Options]}
[с версии 1.0.43]
Посылается щелчок мыши, при этом доступны те же опции, что и для команды Click. Например, {Click} щёлкнет один раз левой кнопкой в текущей позиции указателя, а {Click 100, 200} щёлкнет в точке с координатами 100, 200 (основываясь на CoordMode). Чтобы переместить мышь без щелчка, поставьте 0 после координат; например, {Click 100, 200, 0}. Паузу между щелчками задаёт SetMouseDelay (не SetKeyDelay).
{WheelDown}, {WheelUp}, {LButton}, {RButton}, {MButton}, {XButton1}, {XButton2} Посылается событие кнопки или колеса мыши в текущей позиции указателя (изменение позиции и другие возможности смотрите в описании {Click} выше. Задержку между щелчками задаёт SetMouseDelay.
{Blind} Когда {Blind} стоит первым в посылаемой строке, клавиши Alt/Control/Shift/Win, находящиеся в нажатом состоянии, не будут отпущены перед посылкой строки. Например, комбинация +s::Send {Blind}abc пошлёт ABC, а не abc, поскольку пользователь держит нажатым Shift.

{Blind} также влечёт за собой игнорирование SetStoreCapslockMode, т.е. состояние CapsLock не будет изменено. Наконец, при использовании {Blind} не посылаются дополнительные нажатия Control. Эти нажатия предотвращают: 1) активацию Главного меню во время нажатий LWin/RWin; 2) активацию строки меню окна при посылке Alt.

Режим Blind внутренне используется при переназначении клавиш. Например, переназначение a::b будет выдавать: 1) «b», когда вы нажмёте «a»; 2) «B» при нажатии «A» (в верхнем регистре); 3) Control-B при нажатии Control-A.

{Blind} не поддерживается командами SendRaw и ControlSendRaw, а также не полностью поддерживается командой SendPlay, особенно когда дело касается клавиш-модификаторов (Control, Alt, Shift, Win).

{Raw}
[с версии 1.0.43]
Посылает строку буквально как она есть, т.е. не преобразует {Enter} в нажатие клавиши Enter, ^c в нажатие Control-C и т.п. Действие {Raw} распространяется на ту часть строки, которая следует после него.

Повтор или удержание клавиши

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

Send {DEL 4} ; Нажать Delete 4 раза.
Send {S 30} ; Послать 30 S в верхнем регистре.
Send +{TAB 4} ; Нажать Shift-Tab 4 раза.

Чтобы удерживать нажатой или отпустить клавишу, поместите в фигурные скобки её имя и слово Down (вниз) или Up (вверх). Например:

Send {b down}{b up}
Send {TAB down}{TAB up}
Send {Up down} ; Нажать клавишу «Стрелка вверх».
Sleep 1000 ; Держать её нажатой 1 секунду.
Send {Up up} ; Отпустить.

Когда клавиша удерживается вышеописанным методом, не происходит её автоповтор, как это было бы при физическом удержании (причина в том, что автоповтор является возможностью драйвера/оборудования). Однако для симуляции автоповтора можно использовать Loop. Следующий пример посылает 20 нажатий Tab:

Loop 20
{
Send {Tab down} ; Автоповтор состоит из цепочки событий Down (без Up).
Sleep 30 ; Пауза в миллисекундах между нажатиями (либо используйте SetKeyDelay).
}
Send {Tab up} ; Отпустить клавишу.

Вместо Down также можно использовать DownTemp. Эффект будет тот же, за исключением клавиш-модификаторов (Control/Shift/Alt/Win). В последнем случае DownTemp сообщает следующим за ним посылающим командам, что модификаторы не являются постоянно нажатыми, т.е. они могут отпускаться, если это нужно. Например, если за командой Send {Control DownTemp} следует команда Send a, ею будет послано обычное нажатие «а», а не комбинация Control-A.

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

В добавок к буквам от A до Z, также поддерживаются следующие буквы и символы (однако, если кодовая страница вашей системы отлична от 1252 [США и Западная Европа], этот список может быть иным):

€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿

ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ

BlockInput в сравнении с SendInput/SendPlay: Хотя команда BlockInput может быть использована для защиты симулируемых скриптом нажатий от прерывания физическими нажатиями, производимыми пользователем, для этой цели часто лучше использовать SendInput или SendPlay. Их преимущество в том, что они не отбрасывают то, что печатает пользователь во время посылки; его нажатия запоминаются и посылаются позже.

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

Поскольку операционная система не позволяет симуляцию комбинации CTRL-ALT-DELETE, команды вроде ^!{Delete} работать не будут.

SendInput [с версии 1.0.43]

SendInput, как правило, является предпочтительным способом посылки нажатий благодаря его высокой скорости и надёжности. В большинстве случаев SendInput работает почти мгновенно даже при посылке длинных строк. Благодаря своей скорости он более надёжен, поскольку при этом снижается вероятность того, что какое-то другое окно выскочит неожиданно на первый план и перехватит посылаемые нажатия. Надёжность повышает и тот факт, что все физические нажатия пользователя во время посылки запоминаются и посылаются позже.

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

Замечание: SendInput игнорирует SetKeyDelay, поскольку операционная система не поддерживает задержки для этого режима. Однако когда SendInput сбрасывается в SendEvent при условиях, описанных ниже, он использует SetKeyDelay -1, 0 (исключение: если задержки для SendEvent были установлены как «-1,-1», то используется эта настройка). Если SendInput сбрасывается в SendPlay, он использует его задержки.

Если какой-то другой скрипт (не тот, где выполняется SendInput) установил низкоуровневый хук клавиатуры, SendInput автоматически переключается в SendEvent (или в SendPlay, если действует команда SendMode InputThenPlay). Это делается потому, что присутствие внешнего хука сводит на нет все преимущества SendInput, делая его хуже как SendPlay, так и SendEvent. Однако поскольку SendInput не способен обнаруживать низкоуровневые хуки, установленные другими программами, а только AutoHotkey с версии 1.0.43, в этих случаях он не будет переключаться, что сделает его менее надёжным, чем SendPlay/Event.

Когда SendInput посылает щелчки мыши способами вроде {Click}, и действует команда CoordMode Mouse, Relative (настройка по умолчанию), координаты щелчков будут относительны к окну, которое было активным в момент начала посылки. Поэтому, если SendInput в процессе посылки намеренно активирует другое окно (например, через Alt-Tab), координаты последующих щелчков будут неверными, поскольку они останутся относительными к прежнему окну, а не к новому.

SendPlay [с версии 1.0.43]

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

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

Как и у SendInput, нажатия SendPlay не смешиваются с теми, что производит пользователь. Нажатия пользователя запоминаются и посылаются позже.

Хотя SendPlay значительно медленнее SendInput, он обычно быстрее, чем традиционный SendEvent (даже с задержкой -1).

SendPlay неспособен вызывать срабатывание системных горячих клавиш, использующих клавиши Windows (LWin и RWin). Например, он не может вызвать Главное меню или открыть диалог «Выполнить» через Win-R.

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

SendPlay не использует стандартные настройки SetKeyDelay и SetMouseDelay. По умолчанию, задержки у него отсутствуют вообще. Как их можно изменить, показано в примерах ниже:

SetKeyDelay, 0, 10, Play ; Учтите, что 0 и -1 — это одно и то же для SendPlay.
SetMouseDelay, 10, Play

SendPlay не может включать и выключать CapsLock, NumLock и ScrollLock. Также он не может изменить состояние клавиш, которое считывается через GetKeyState, разве только нажатия посылаются в какое-либо из окон самого скрипта. Даже в этом случае изменения состояний левых и правых клавиш-модификаторов (например, RControl) могут быть считаны только через их нейтральный вариант (например, Control). SendPlay также имеет и другие ограничения, о которых рассказано в описании команды SendMode.

В отличие от SendInput и SendEvent, пользователь может прервать работу SendPlay, нажав Control-Alt-Del или Control-Escape. Когда такое происходит, оставшиеся нажатия не посылаются, но скрипт продолжает выполняться, как если бы SendPlay завершился нормально.

Хотя SendPlay может посылать события LWin и RWin, но они посылаются в активное окно и не выполняют своей обычной функции в операционной системе. Чтобы обойти это, используйте SendEvent. Например, команда SendEvent #r вызовет диалог «Выполнить».

Примеры

; Примечание переводчика: посылка русских букв работает нормально,
; если принимающее окно переключено на русский язык.
Send Искренне ваш,{enter}Джон Смит ; Печатает подпись на двух строках.
Send !фс ; Выбор пункта Файл -> Сохранить (Alt+Ф и затем С).
Send {End}+{Left 4} ; Перейти в конец текста, затем послать
; 4 нажатия Shift+Стрелка влево.
SendInput {Raw}Длинная последовательность символов, посылаемая без интерпретации.

Автор перевода: YMP

Настоящее имя переводчика: Юрий Попов

Список клавиш и кнопок мыши/джойстика

Мышь (работает только с Windows NT/2000/XP)

LButton — левая кнопка мыши

RButton — правая кнопка мыши

MButton — средняя кнопка мыши (или колесо)

WheelDown — поворот колеса мыши «вниз»

WheelUp — поворот колеса мыши «вверх»

Поддерживается только Windows 2000/XP:

XButton1 — четвертая кнопка мыши, боковая

XButton2 — пятая кнопка мыши, боковая

Клавиатура

Примечание: названия буквенных и цифровых клавиш точно такие же, как и сами символы этих клавиш. То есть, клавиша «b» записывается как b, а клавиша «5» как 5.

Space — пробел

Tab

Enter (или Return)

Escape (или Esc)

Backspace (или BS)

Delete (или Del)

Insert (или Ins)

Home

End

PgUp

PgDn

Up

Down

Left

Right

ScrollLock

CapsLock

NumLock

NumpadDiv — слэш «/»

NumpadMult — звездочка «*»

NumpadAdd — плюс «+»

NumpadSub — минус «-«

NumpadEnter — клавиша «Numpad-Enter»

Следующие названия клавиш используются, когда Numlock выключен:

NumpadDel

NumpadIns

NumpadClear — та же кнопка, что и Numpad5 на клавиатуре

NumpadUp

NumpadDown

NumpadLeft

NumpadRight

NumpadHome

NumpadEnd

NumpadPgUp

NumpadPgDn

Эти названия клавиш используются при включенном Numlock’e:

Numpad0

Numpad1

Numpad2

Numpad3

Numpad4

Numpad5

Numpad6

Numpad7

Numpad8

Numpad9

NumpadDot — «Numpad-точка»

С F1 по F24 — двенадцать или более функциональных клавиш, на большинстве клавиатур представлены в самом верхнем ряду.

AppsKey — клавиша, вызывающая контекстное меню файла/программы, как при правом клике мышкой.

LWin — левая клавиша «Windows»

RWin — правая клавиша «Windows»

Control (или Ctrl)

Alt

Shift

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

LControl (или LCtrl) — левый «Сontrol»

RControl (или RCtrl) — правый «Сontrol»

LShift

RShift

LAlt — левый «Alt»

RAlt — правый «Alt». Примечание: если на вашей клавиатуре вместо клавиши RAlt сделана клавиша AltGr, вы можете использовать следующую запись данной клавиши: <^>! Также заметим, что клавишу AltGr можно записать как сочетание клавиш «LControl & RAlt::».

PrintScreen

CtrlBreak

Pause

Break

Help — довольно редкая клавиша, присутствует далеко не на всех клавиатурах. И работает совсем не как F1.

Sleep — предупреждаем, что клавиша «Sleep» на некоторых клавиатурах не работает под этой записью.

Клавиши расширенных функций Мультимедийных и Интернет-клавиатур:

Browser_Back

Browser_Forward

Browser_Refresh

Browser_Stop

Browser_Search

Browser_Favorites

Browser_Home

Volume_Mute

Volume_Down

Volume_Up

Media_Next

Media_Prev

Media_Stop

Media_Play_Pause

Launch_Mail

Launch_Media

Launch_App1

Launch_App2

Запись вида SCnnn, где nnn — это сканкод клавиши, позволяет нам работать с остальными клавишами, не упоминавшимися выше. Подробнее об этом — см. ниже.

Возможна запись VKnn, где nn является шестнадцатиричным виртуальным кодом клавиши. Несмотря на то, что этот редко используемый метод поддерживается всеми версиями программы, только с версии 1.0.38.02 и выше для некоторых типов горячих клавиш реализовано предотвращение отслеживания их функцией «keyboard hook» (обработчик клавиатурных прерываний). Например, следующая комбинация клавиш не использует обработчик клавиатурных прерываний (keyboard hook), и как следствие может быть запущена нажатием как клавиши Home, так и NumpadHome:

^VK24::MsgBox Вы нажали Home или NumpadHome`, удерживая клавишу Control.

Джойстик

Joy1 — Joy32: кнопки джойстика. Для удобства определения номеров кнопок вашего джойстика был создан специальный тест-скрипт (см. ссылку в оригинале статьи). Обратите внимание, что такие префиксы, как ^ (control) и + (shift) здесь не поддерживаются (тем не менее, команда GetKeyState может использоваться). Также обратите внимание, что нажатия клавиш джойстика всегда обращены напрямую в активное окно, поддерживающее приём таких сигналов.

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

JoyX, JoyY, и JoyZ: где X (горизонтальная), Y (вертикальная), и Z (высота/глубина) — оси координат джойстика.

JoyR: руль джойстика или 4-ая ось джойстика.

JoyU и JoyV: 5-ая и 6-ая оси джойстика.

JoyPOV: the point-of-view (hat) control (POV control, «шляпка» или «переключатель видов»; например, вид глазами игрока).

JoyName: название джойстика.

JoyButtons: количество кнопок, поддерживаемых джойстиком (не всегда точное).

JoyAxes: количество направлений, поддерживаемых джойстиком.

JoyInfo: генерирует строку, состоящую из нуля или более знаков, иллюстрирующих возможности джойстика: Z (имеется Z направление), R (имеется R направление), U (имеется U направление), V (имеется V направление), P (имеется POV control), D (POV control имеет ограниченное количество дискретных/промежуточных настроек), C (POV control передает непрерывные/точные данные). Пример строки: ZRUVPD.

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

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

Использование джойстика как мыши: специальный скрипт превращает ваш джойстик в мышь (см. ссылку в оригинале статьи).

Дистанционные пульты управления

Получение сигналов от дистанционных пультов управления с помощью специального клиентского скрипта WinLIRC — см. ссылку в оригинале статьи.

Специальные клавиши

Если ваши клавиатура или мышь имеют клавиши, не перечисленные выше, вы всё равно имеете возможность использовать их в качестве горячих клавиш, используя следующий метод (необходимы Windows NT/2000/XP или выше):

1. Вначале убедитесь, что у вас проинсталлирован обработчик клавиатурных прерываний (keyboard hook) — #InstallKeybdHook.

2. Запускаем этот скрипт, и затем двойным кликом по его иконке в системном трее открываем его главное окно.

3. Затем нажимаем ту самую клавишу, которую пытаемся определить.

4. Далее открываем меню окошка скрипта «View — Key history and script info» и прокручиваем записи до самого низа.

5. Где-то внизу этого лога должны быть записи по нажатию-отпусканию нашей искомой клавиши. Сам лог обновляется нажатием клавиши F5. Примечание: если после нажатия искомой клавиши никаких записей в логе не появилось, значит такая клавиша не распознаётся данной программой. В этом случае вы не можете использовать данную клавишу как горячую, т.к. либо драйвер вашей клавиатуры, либо сама её «железная» составляющая даёт сигнал слишком низкого уровня, недоступного для AutoHotkey. В случае со «злобными» драйверами, вы можете попробовать либо перенастроить сами «родные» драйвера, либо заменить их на другие, более дружественые, например такие, как дефолтные клавиатурные драйвера Windows.

6. Если ваша клавиша успешно определилась, обратите внимание на трехзначное шестнадцатеричное число во второй колонке лога (например, 159).

7. Теперь, чтобы использовать данную клавишу как горячую, следуйте данному примеру:

SC159:: ; Замените 159 на индекс вашей клавиши.

MsgBox, Вы нажали клавишу %A_ThisHotKey%

Return

Как альтернативный способ или в добавление к описанному выше: для переназначения какой-либо клавиши в нашу «искомую» клавишу, используйте запись вида #c::Send {vkFFsc159}. Замените 159 на индекс вашей клавиши, определённый вышеописанным методом. При необходимости замените буквы FF на те, что отображены в первой колонке лога «View-Key history» (код вашей виртуальной клавиши).

© Dmitrij_Medvedev

Синтаксис

  • :: комбинации клавиш
  • ::сокращение::
  • Вернуть

параметры

Сочетания клавиш подробности
^ Ctrl
! Клавиша Alt
+ Клавиша Shift
# Клавиша Windows
{войти} отправить ключ ввода
{Вкладка} отправить ключ вкладки
* подстановочный знак, любая клавиша может быть нажата
~ Настроенная функция ключа не будет заблокирована
<символ указывает левую клавишу (<+ — сдвиг влево)
символ> указывает правую клавишу

Горячая клавиша

Чтобы создать горячую клавишу, которая отправляет последовательность клавиш «Hello World», нажав Ctrl + J на активное окно (может быть продемонстрировано в блокноте, например)

^j::
    Send, Hello World
Return

автозамены

Чтобы сценарий заменил фразу, используйте синтаксис ::abbreviation:: hotstring. Он заменит btw by the way когда вы введете btw а затем клавишу пробела.

::btw::by the way

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

::lmi::user{tab}password{enter}

Несколько нажатий клавиш

Для запуска скрипта при нажатии нескольких клавиш используйте & между клавишами.

Numpad0 & Numpad1::
    MsgBox You pressed 0 and 1
return

Контекстно-зависимые горячие клавиши и горячие клавиши

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

#IfWinActive [, WinTitle, WinText]
#IfWinExist [, WinTitle, WinText]
#IfWinNotActive [, WinTitle, WinText]
#IfWinNotExist [, WinTitle, WinText]

Пример: Вы хотите stackoverflow.com быть послан всякий раз , когда вы набираете so (и через пробел после этого) в Google Chrome, но игнорировать строку автозамены в любом другом окне.

#IfWinActive, ahk_class Chrome_WidgetWin_1
::so::stackoverflow.com

Используя #If [, Expression ] , вы можете активировать горячую клавишу только тогда, когда произвольное выражение истинно, например:

#If A_Hour < 9
F1::
    MsgBox, It is too early to ask for help!
return

Клавиши быстрого доступа

Следующий пример переназначает ключ Z на Y и наоборот, например, если вы хотите работать с макетом QWERTY на клавиатуре QWERTZ.

z::y
y::z

Переключаемые горячие клавиши

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

; refresh script hotkey
Numpad9:: 
    GetKeyState, state, ScrollLock, T
    if ( state = "D" )
        Reload
Return

Numpad1:: 
    GetKeyState, state, ScrollLock, T
    if ( state = "D" )
        Send,         Hello 
Return

Numpad2:: 
    GetKeyState, state, ScrollLock, T
    if ( state = "D" )
        Send,         World
Return
;...

Правильно используем программу AutoHotKey

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

Работа с клавиатурой

Для того, чтобы отправить сигнал о нажатии определенной клавиши в активное на данный момент окно, нужно использовать команду «Send». К примеру, можно назначить комбинацию клавиш «Win+пробел» для того, чтобы автоматически вводилась фраза «Добрый вечер!». Для этого нужно будет использовать следующие команды:

#space::
Send Добрый вечер!
return

Чтобы просто симулировать использование какой-то конкретной клавиши, вам нужно фигурные скобки. Таким образом, для нажатия кнопки «Enter» вам нужно будет воспользоваться командой «{Enter}».

Специальные клавиши

При необходимости вы можете сделать так, чтобы программа автоматически нажимала специальные клавиши, такие как «Ctrl», «Shift» и «Alt». К примеру, используя команду «Send ^с!{tab}», вы делаете так, чтобы программа использовала автоматическую вставку, а потом сразу же переключалась на другое окно.

Символ «^» в данном случае указывает программе использовать сначала клавишу «Ctrl», в то время как «!» представляет собой клавишу «Alt». Соответственно, команда «{tab}», как и говорилось выше, дает программе установку использовать кнопку «Tab». Чтобы не вызвать никаких проблем и конфликтов в процессе работы программы, вам следует использовать кириллицу, так как клавиши будут чаще всего совпадать с нынешней раскладкой клавиатуры.

Более подробно ознакомиться со списком специальных символов вы сможете непосредственно через меню «Справка» в самой программе.

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

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

::бгф::берегись, кинул гранату, это флешка

При этом сразу стоит отметить, что для работоспособности скрипта нужно будет после введенного сокращения нажать на «пробел» или просто поставить запятую.

Имитируем клики мышкой

С кликами мышкой работать несколько сложнее, чем с использованием клавиатуры, так как здесь помимо кнопок есть еще и определенное месторасположение курсора, которое нужно указывать. В связи с этим пользователь сначала должен определить координаты X и Y того места на экране, куда должно отправляться созданное событие. Делается это при помощи встроенной в программу утилиты под названием Active Window Info.

1. Для начала вам следует запустить саму программу из трея на заранее открытом скрипте. Также вы можете просто кликнуть меню «Пуск», выбрать «Все программы» и там в меню «AutoHotKey» выбрать «Active Window Info». Сразу стоит сказать о том, что данное окно будет автоматически располагаться поверх остальных, что требуется для удобства работы с утилитой.

Правильно используем программу AutoHotKey

2. Запустите подопытное окно программы. Для этого нужно кликнуть по заголовку или же использовать стандартную комбинацию клавиш «Alt+Tab».

3. Перемещайте курсор в то место, где нужно будет осуществлять нужное вам событие, после чего посмотрите уже в окно Active Window Info. Теперь записывайте координаты, которые показаны в окне этой программы (их можно найти в строчке «On Screen» или же в строке «In Active Window») в зависимости от того, какая область конкретно на данный момент вас интересует.

Стоит отметить тот факт, что у пользователей Windows XP есть возможность использования комбинации клавиш «Shift+Alt+Tab», при помощи которой окно Window Spy замораживается, а пользователь переходит к нему для копирования нужных цифр.

4. Ставьте полученные вами координаты в скрипте после команды «MouseClick», при этом вставлять нужно только через запятую и после того, как будет обозначена кнопка мыши.

Выглядеть все это может примерно так:

MouseClick, Right, 33, 22

В данном случае «MouseClick» – это команда, которая предназначается для щелчков мыши при помощи AutoHotKey, но для ее нормальной работы нужно будет задать также три параметра через запятую. Первый указывает кнопку мыши (можно писать Left или Right целиком, а можно просто использовать буквы L и R. M указывает на необходимость клика по скроллу). Остальные параметры представляют собой координаты X и Y того места на экране, в которое нужно будет кликнуть.

Также есть команда «MouseMove», при помощи которой курсор просто перемещается в определенную область на экране. Пользоваться ей гораздо проще, ведь нужно просто ввести команду и указать координаты, например:

#space::

MouseMove, 33, 22

Помимо всего прочего, программа может использоваться для перетаскивания мышью каких-либо объектов, что осуществляется при использовании команды «MouseClickDrag». В этой команде уже нужно будет вводить сразу пять параметров, первый из которых представляет собой клик нужной кнопкой мыши, второй и третий включают в себя стартовые координаты, а четвертый и пятый – последние, то есть то место, где мышка должна быть отпущена.

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

#space::

MouseClickDrag, L, 33, 22, 66, 44

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

Скачать AutoHotKey бесплатно

Скачать AutoHotKey с официального сайта.

Этот урок так же покажет, как использовать AutoHotkey для печати текста в окнах приложений и назначать регистровые клавиши и кнопки мыши.
Для отправки сигнала о нажатии клавиши в активное окно используется команда Send(переводится, как отправить). В первом примере, комбинация Win+пробел назначается горкнопкой для ввода фразы «Здрасти, Добрый день!» (убедитесь, что окно, в котором вы хотите увидеть этот текст, открыто и нажмите Win+S)

#space::
Send Здрасти,{Enter}Добрый день!
return

В этом примере все нажатия клавиш отправляются в активное окно в буквальном виде кроме набора символов {Enter} поскольку такой синтаксис эмитирует нажатие клавиши Enter благодаря фигурным скобкам, обрамляющим слово Enter.

В следующем примере показан другой пример часто используемых символов. Чтоб он сработал, откройте сразу два Блокнота.

#space::
Send ^с!{tab}Вставить:^м
return

Строка выше посылает Ctrl+C вместе Alt+Tab сопровожденное строчкой «Вставить» и комбинацией Ctrl+V. Символ «^» обозначает клавишу Ctrl, символ «!» обозначает клавишу ALT , {tab} это кнопка tab. Дальше за место английской «c» используется наша «с» и вместе латинской «v» мы использовали кириллическую «м» поскольку эти клавиши совпадают расположением и не вызывают глюков в автохоткее. Смотри полный список специальных символов и клавиш для команды Send.

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

В примере ниже сокращение «ог» (или любое другое на ваше усмотрение) используется для вывода длинной фразы, например такой «осторожно граната разбегайся, а то каюк, и простите те, кто не успеет, ваша смерть будет не напрасной, я отомщу!». Гор. Сокращение «ог» в примере обрамлено двумя парами двойных кавычек (это обязательное условие для работы скрипта) Важно, скрипт сработает, если только в окне чата игры (или другой программы) после «ог» пропечатать пробел или запятую, которые так же выводятся вместе с текстом. Что вполне логично.
ПРИМЕР
::ог::осторожно граната, разбегайся, а то каюк, простите те, кто не успел, ваша смерть была не напрасной поверьте{!}

———————————————————————————————————————————————————————————————
Как использовать AutoHotkey для имитации кликов мышки
В этом уроке мы нарисуем с помощью AutoHotkey домик в стандартной программе MSpaint
Для того чтоб отправить клик мышки в активное окно, необходимо для начала уметь определят координаты X и Y места на экране куда нужно отправить наше событие вызванное нажатием клика мышки. Это делается при помощи специальной программы, включенной в состав AutoHotkey — AutoIt3 Window Spy. И так начнем учиться, работе с этой утилитой, для этого вам потребуется выполнить следующие шаги.

1. Для начала запустите саму AutoIt3 Window Spy из трэя на запущенном скрипте или из меню Пуск -> все программы -> AutoHotkey -> AutoIt3 Window Spy. Окно Window Spy всегда будет находиться поверх остальных запущенных окон эту нужно для удобства работы, что весьма полезно, например, в играх которые, запускаясь разворачиваются на весь экран поверх всех программ.
2. Активизируйте подопытное окошко программы, щелкнув для этого по его заголовку, или используя комбинацию клавиш alt+tab или другим способом.
3. Переместите курсор мыши в ту часть окна, где должно произойти интересующее вас событие с мышью и посмотрите в окно AutoIt3 Window Spy. Запишите координаты показанные в нем ,их видно в строчке On Screen:(на ней отображаются координаты на рабочем столе) иили из строчки In Active Window: (где отображаются координаты активного окна) в зависимости от того какая область вас интересует на данный момент. На Windows XP можно воспользоваться комбинацией Shift-Alt-Tab чтобы заморозить Window Spy и перейти в него для копирования цифр.
4. Подставите ваши координаты в скрипте после команды MouseClick(команда переводится как МышьЩелчек) через запятую и после обозначения кнопки мыши. Например, как в следующем примере мышка щелкает левой кнопкой в указанные координаты:

Пример:
MouseClick, Left, 30, 20
второй пример записи той же команды с сокращённой командой
MouseClick, L, 30, 20

Разбор полета. MouseClick это команда, используемая для задания щелчков мыши имеющей три параметра прописываемые через запятую. Первый параметр обозначает кнопку мыши(L и Left обозначают левую кнопку, для правой кнопки служит параметр Right или R, Middle или M для средней кнопки с колёсиком, X2 пятая, X1 четвёртая). Второй и третий параметр являются координатами места, где производится щелчок мышки.

Для того чтобы просто переместить мышь не щелкая, применяется команда MouseMove (переводится как МышьДвижение) с указанием начальных и конечных координат.
#space::
MouseMove, 30, 20

Для перетаскивания мышью любых объектов, используется команда MouseClickDrag(переводится МышьЩелчекТащить), эта команда имеет пять полезных параметров разделяемых запятой. Первый это кнопка мыши второй и третий начальные координаты, четвертый и пятый конечные координаты или координаты где мышка отпускается.

#space::
MouseClickDrag,L,40,15,111,250
return

Этот скрипт перетаскивает верхнюю левую иконку на рабочем столе в указанные координаты, так что смотрите, чтоб это место (см. координаты) было пусто иначе … надеюсь, у вас есть на шее нечто собственное, я не виноват.

Скрипт снизу запустит рисовалку Майкрософт и нарисует в нем домик. В нем присутствует важная команда WinWaitActive, которая говорит автохоткею дождаться активации указанного вами окна, чтобы продолжить действия скрипта, это очень часто используемая команда обычно прописывается после команды Run. Теперь вам надо узнать, как определять название той программы, которую нужно дождаться. Для этого применяют программу AutoIt3 Window Spy. Научимся искать в ней название требуемой программы, для этого запустите и активизируйте требуемую программу-пациента и посмотрите в окне AutoIt3 Window Spy строку ahk_class. После ahk_class идет название активной программы. Пропишите эту строку через запятую после команды WinWaitActive и затем добавьте ,, 2 и с новой строки if ErrorLevel затем с новой строки return. Дальше уже можете писать то, что требуется выполнить в этой программе.

#space::
Run, mspaint.exe
WinWaitActive, ahk_class MSPaintApp,, 2
if ErrorLevel
return
MouseClickDrag, L, 150, 250, 150, 150
MouseClickDrag, L, 150, 150, 200, 100
MouseClickDrag, L, 200, 100, 250, 150
MouseClickDrag, L, 250, 150, 150, 150
MouseClickDrag, L, 150, 150, 250, 250
MouseClickDrag, L, 250, 250, 250, 150
MouseClickDrag, L, 250, 150, 150, 250
MouseClickDrag, L, 150, 250, 250, 250
return

Другие FAQ по AutoHotKey здесь 

First we’ll cover the basic Autohotkey hotkey syntax. Which is arguably already pretty confusing for
newcomers in and by itself.

But we don’t stop there as after adding more and more hotkeys, it will also become harder and harder
to think of new key combinations that are somehow still memorable. There is only so much
you can do with the # (Windows) key etc.

Time for some creative hotkey combinations! ‘Advanced Hotkeys’ covers code snippets on
how to run different scripts on single, double or triple key presses as well as how to
differentiate between long(ish) key presses or mouse clicks. And more…

Example

; Single line hotkey
^#D::MsgBox Pressed Control + Win + D (%A_ThisHotKey%)

; Control + Win + C: Multi line script
^#C::
Run, notepad.exe
WinWait, Untitled - Notepad, , 3
Send, Dear sir,{enter}{enter}
Return

Basic Syntax

Keyboard

Shorthand Full Desc
+ Shift  
^ Control or Ctrl  
# Win Windows
! Alt  
<# LWin Left Windows
+> RShift Right Shift
<^>! AltGr  
  AppsKey Menu key
  CapsLock  

Others:

  • F[1-24], Tab, Space, Enter/Return, Backspace/BS
  • Left, Up, Down, Right
  • Esc, Ins, Delete/Del, Home, End, PgUp, PgDn
  • PrintScreen, ScrollLock, CtrlBreak
  • Sleep, Pause

Numpad:

  • Numlock ON: Numpad[0-9],
  • Numlock OFF: NumpadIns, NumpadEnd, NumpadMult, NumpadEnter, …

Multimedia:

  • Browser_Stop, Media_Next, Volume_Up, Launch_App2, …

Mouse:

  • LButton, RButton, MButton
  • XButton1 (Browser_Back), XButton2 (Browser_Forward)
  • WheelUp, WheelDown, WheelLeft, WheelRight

Joystick:

  • JoyX, JoyPOV, JoyInfo, …

JoystickTest: A simple script
for determining the exact mapping of your joystick.

Find the full KeyList here.
If your keyboard has keys that are not in the full keylist,
it might still be possible to map them to a script.

You can also let Autohotkey itself do the figuring out for you. Its builtin command
KeyHistory opens a window where you can figure out which is which.

Native function

Prefix a hotkey with ~ to not block the native function.

#IfWinActive, ahk_class CabinetWClass
; Control + Shift + 6: Details View in Windows Explorer
; Resize columns so that filenames are completely visible
~^+6::Send, {Control Down}{NumpadAdd}{Control Up}
#IfWinActive

Custom combinations

To combine keys that do not have a shorthand use &.
Keys on the left side of such custom combinations lose their native function.
They are called prefix keys.

Example: Search google for text on the clipboard by pressing Capslock and X.

Capslock & X::Run, http://www.google.com/search?q=%clipboard%

Other

Key Down and Up
Add UP to a hotkey combination to run the script on key release rather than on keypress.

AppsKey::ToolTip Press < or > to cycle through tabs.
AppsKey Up::ToolTip
~AppsKey & <::Send ^+{tab}
~AppsKey & >::Send ^{tab}

Wildcard
* acts as a key modifier wildcard.

*#c::Msgbox Triggered by Win+C, Shift+Win+C, Ctrl+Win+C, etc

Resending
$ is necessary when you need to send the same hotkey and not execute your script again.

$#e::
; Send Control + C => Copy text
Send, ^c
ClipWait, 1
fileExists := FileExist(clipboard)
if (fileExists = "D") {
    ; Open explorer in path on clipboard
    Run % "explorer.exe /root," clipboard

} else if (fileExists) {
    ; Open explorer with file selected
    Run % "explorer.exe /select," clipboard

} else {
    ; No path on clipboard, just open explorer
    Send #e
}
Return

Advanced Hotkeys

Creating more advanced hotkey combinations.

Context sensitive hotkeys

Control in which applications a hotkey is (not) active with the
keywords
IfWinActive,
IfWinExist, IfWinNotActive and IfWinNotExist.

#IfWinActive, ahk_class Notepad
^a::MsgBox You pressed Ctrl-A while Notepad is active. Pressing Ctrl-A in any other window will pass the Ctrl-A keystroke to that window.
#c::MsgBox You pressed Win-C while Notepad is active.
#IfWinActive

#c::MsgBox You pressed Win-C while any window except Notepad is active.


#If MouseIsOver("ahk_class Shell_TrayWnd") and true
WheelUp::Send {Volume_Up}     ; Wheel over taskbar: increase/decrease volume.
WheelDown::Send {Volume_Down} ;

MouseIsOver(WinTitle) {
    MouseGetPos,,, Win
    return WinExist(WinTitle . " ahk_id " . Win)
}
#If


$^p::
IfWinActive ahk_class Notepad
    return  ; i.e. do nothing, which causes Control-P to do nothing in Notepad.

Send ^p
return

Find out the ahk_class of a program with Window Spy (AU3_Spy.exe)
which comes bundled with Autohotkey itself.

Combining 2 hotkeys

Check if a hotkey combination is pressed twice

~Esc::
; Esc twice to close an application
If (A_PriorHotKey = A_ThisHotKey and A_TimeSincePriorHotkey < 500)
    WinClose
Return

Gotcha: the A_PriorHotkey will only hold values of combinations that are also defined
as a hotkey. The value of A_PriorHotkey will be exactly as the hotkey is defined.

Follow a hotkey up with an additional keypress

; AltGr + C: Change the case of the selected text
; Follow up with (U)PPER, l(ower) or T(itle)
<^>!c::
clipboard =
Send, ^c
ClipWait, 1
Input keyPressed, I L1
if (keyPressed = "u") {
    StringUpper toUpperCase, clipboard
    Send %toUpperCase%
} else if (keyPressed = "l") {
    StringLower toLowerCase, clipboard
    Send %toLowerCase%
} else if (keyPressed = "p" or keyPressed = "t") {
    StringUpper toTitleCase, clipboard, T
    Send %toTitleCase%
}
return

Input option L1 is the maximum allowed length. (L1 -> L5)

Double, triple and long key presses

#c::
DoubleClickTime := DllCall("GetDoubleClickTime") ; in milliseconds

; Wait for 'c' to be released
KeyWait, c
if (A_TimeSinceThisHotkey > DoubleClickTime) {
    Msgbox Longpress
    return
}

; Wait for 'c' to be pressed down again (option "d")
; But timeout after T0.5 seconds (If DoubleClickTime is 500)
KeyWait, c, % "d T"DoubleClickTime/1000
If ! Errorlevel
    Msgbox Doublepress
else
    Msgbox Singlepress
Return

KeyWait docs
or more info on the forum.

Long middle mouse click with GetKeyState

~MButton::
HowLong = 0
Loop
{
    HowLong++
    Sleep, 10
    GetKeyState, MButton, MButton, P
    IfEqual, MButton, U, Break
}
IfLess, HowLong, 20, Return

; Do stuff when middle mouse button was pressed longer than 20ms

Triple, quadruple etc keypresses

; Example #3: Detection of single, double, and triple-presses of a hotkey. This
; allows a hotkey to perform a different operation depending on how many times
; you press it:
#j::
if winc_presses > 0 ; SetTimer already started, so we log the keypress instead.
{
    winc_presses += 1
    return
}
; Otherwise, this is the first press of a new series. Set count to 1 and start
; the timer:
winc_presses = 1
SetTimer, KeyWinC, -400 ; Wait for more presses within a 400 millisecond window.
return

KeyWinC:
if winc_presses = 1 ; The key was pressed once.
{
    Run, c:  ; Open a folder.
}
else if winc_presses = 2 ; The key was pressed twice.
{
    Run, c:windows  ; Open a different folder.
}
else if winc_presses > 2
{
    MsgBox, Three or more clicks detected.
}
; Regardless of which action above was triggered, reset the count to
; prepare for the next series of presses:
winc_presses = 0
return

Morse hotkeys

The forum thread on hold patterns.

Morse(timeout = 400) {
   tout := timeout/1000
   key := RegExReplace(A_ThisHotKey,"[*~$#+!^]")
   Loop {
      t := A_TickCount
      KeyWait %key%
      Pattern .= A_TickCount-t > timeout
      KeyWait %key%,DT%tout%
      If (ErrorLevel)
         Return Pattern
   }
}

; Use Backspace
BS::MsgBox % "Morse press pattern " Morse()

; Alt + Z
!z::
p := Morse()
If (p = "0")
  MsgBox Short press
Else If (p = "00")
  MsgBox Two short presses
Else If (p = "01")
  MsgBox Short+Long press
Else
  MsgBox Press pattern %p%
Return

Other

Waiting for something

Wait for something to happen with SetTimer

; Example #2: Wait for a certain window to appear and then alert the user:
#Persistent
SetTimer, Alert1, 500
return

Alert1:
IfWinNotExist, Video Conversion, Process Complete
    return

; Otherwise:
SetTimer, Alert1, Off  ; i.e. the timer turns itself off here.
SplashTextOn, , , The video conversion is finished.
Sleep, 3000
SplashTextOff
return

Suspension

; Toggle script suspension
^#s:: ; Control + Win + S
Suspend
Msgbox % "Script is now " (A_IsSuspended ? "suspended" : "running")
Return

The Pause keyword would halt the current thread
while Suspend stops all hotkeys for triggering.

Start a script with Suspend, Permit to have that hotkey still trigger
even while the script is suspended.

Понравилась статья? Поделить с друзьями:
  • Как написать афишу к спектаклю образец
  • Как написать аудиторское заключение пример
  • Как написать аудит
  • Как написать аудиоплеер
  • Как написать аудиогид