AutoHotKey: как пользоваться? AutoHotKey: как назначить клавиши мыши. Советы специалистов

Перейти на главную страничку сайта (список статей, файлы для скачивания)

ФОРУМ (здесь можно обсудить эту статью, а также саму программу AutoHotkey и проблемы её использования)

Проект перевода документации AutoHotkey: перечень переведённых статей и статей в работе.

Оригинал статьи в AutoHotkey.chm: «Hotkeys (Mouse, Joystick and Keyboard Shortcuts)», в содержании — «Hotkeys»

Ник переводчика: Gourmet.

Настоящее имя переводчика: Валентина Гаврикова, г.Москва.

Горячие клавиши для мыши, джойстика и клавиатуры

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

#т:: Run Notepad return

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

#т::Run Notepad

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

В следующем примере для обозначения Control+Alt используются символы ^!:

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

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

Символ Описание
# 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.

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

Метки горячих клавиш можно использовать как обычные метки: вы можете использовать команды 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.

Перейти на главную страничку сайта (список статей, файлы для скачивания)

© 2007 http://www.script-coding.com При любом использовании материалов сайта обязательна ссылка на него как на источник информации, а также сохранение целостности и авторства материалов.

Перейти на главную страничку сайта (список статей, файлы для скачивания)

ФОРУМ (здесь можно обсудить эту статью, а также саму программу AutoHotkey и проблемы её использования)

Проект перевода документации AutoHotkey: перечень переведённых статей и статей в работе.

Оригинал статьи в AutoHotkey.chm: «List of Keys and Mouse/Joystick Buttons», в содержании — «Key List (Keyboard, Mouse, Joystick)»

Ник переводчика: Дед Мазай.

Настоящее имя переводчика: Антон Иваненко, г.Москва.

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

Мышь (работает только с 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» (код вашей виртуальной клавиши).

Перейти на главную страничку сайта (список статей, файлы для скачивания)

© 2007 http://www.script-coding.com При любом использовании материалов сайта обязательна ссылка на него как на источник информации, а также сохранение целостности и авторства материалов.

Hotkeys (Mouse, Joystick and Keyboard Shortcuts)

Table of Contents

Introduction and Simple Examples

Hotkeys are sometimes referred to as shortcut keys because of their ability to easily trigger an action (such as launching a program or keyboard macro). In the following example, the hotkey + is configured to launch Notepad. The pound sign [#] stands for the key, which is known as a modifier:

#n:: Run Notepad return

In the final line above, serves to finish the hotkey. However, if a hotkey needs to execute only a single line, that line can be listed to the right of the double-colon. In other words, the is implicit:

#n::Run Notepad

To use more than one modifier with a hotkey, list them consecutively (the order does not matter). The following example uses to indicate ++:

^!s:: Send Sincerely,{enter}John Smith ; This line sends keystrokes to the active (foremost) window. return

You can use the following modifier symbols to define hotkeys:

Symbol Description
#

(Windows logo key).

[v1.0.48.01+]: For Windows Vista and later, hotkeys that include the key (e.g. #a) will wait for the key to be released before sending any text containing an keystroke. This prevents usages of Send within such a hotkey from locking the PC. This behavior applies to all sending modes except SendPlay (which doesn’t need it) and blind mode. [v1.1.29+]:Text mode is also excluded.

Note: Pressing a hotkey which includes the key may result in extra simulated keystrokes ( by default). See #MenuMaskKey.

!

Note: Pressing a hotkey which includes the key may result in extra simulated keystrokes ( by default). See #MenuMaskKey.

^
+
& An ampersand may be used between any two keys or mouse buttons to combine them into a custom hotkey. See below for details.
< Use the left key of the pair. e.g. <!a is the same as !a except that only the left key will trigger it.
> Use the right key of the pair.
<^>!

(alternate graving). If your keyboard layout has instead of a right key, this series of symbols can usually be used to stand for . For example:

<^>!m::MsgBox You pressed AltGr+m. <^<!m::MsgBox You pressed LeftControl+LeftAlt+m.

Alternatively, to make itself into a hotkey, use the following hotkey (without any hotkeys like the above present):

LControl & RAlt::MsgBox You pressed AltGr itself.

*

Wildcard: Fire the hotkey even if extra modifiers are being held down. This is often used in conjunction with remapping keys or buttons. For example:

*#c::Run Calc.exe ; Win+C, Shift+Win+C, Ctrl+Win+C, etc. will all trigger this hotkey. *ScrollLock::Run Notepad ; Pressing ScrollLock will trigger this hotkey even when modifier key(s) are down.

Wildcard hotkeys always use the keyboard hook, as do any hotkeys eclipsed by a wildcard hotkey. For example, the presence of would cause to always use the hook.

~

When the hotkey fires, its key’s native function will not be blocked (hidden from the system). In both of the below examples, the user’s click of the mouse button will be sent to the active window:

~RButton::MsgBox You clicked the right mouse button. ~RButton & C::MsgBox You pressed C while holding down the right mouse button.

Unlike the other prefix symbols, the tilde prefix is allowed to be present on some of a hotkey’s variants but absent on others. However, if a tilde is applied to the prefix key of any custom combination which has not been turned off or suspended, it affects the behavior of that prefix key for all combinations.

Special hotkeys that are substitutes for alt-tab always ignore the tilde prefix.

[v1.1.14+]: If the tilde prefix is applied to a custom modifier key (prefix key) which is also used as its own hotkey, that hotkey will fire when the key is pressed instead of being delayed until the key is released. For example, the ~RButton hotkey above is fired as soon as the button is pressed. Prior to [v1.1.14] (or without the tilde prefix), it was fired when the button was released, but only if the RButton & C combination was not activated.

If the tilde prefix is applied only to the custom combination and not the non-combination hotkey, the key’s native function will still be blocked. For example, in the script below, holding will show the ToolTip and will not trigger a context menu:

AppsKey::ToolTip Press < or > to cycle through windows. AppsKey Up::ToolTip ~AppsKey & <::Send !+{Esc} ~AppsKey & >::Send !{Esc}

If at least one variant of a keyboard hotkey has the tilde modifier, that hotkey always uses the keyboard hook.

$

This is usually only necessary if the script uses the Send command to send the keys that comprise the hotkey itself, which might otherwise cause it to trigger itself. The $ prefix forces the keyboard hook to be used to implement this hotkey, which as a side-effect prevents the Send command from triggering it. The $ prefix is equivalent to having specified somewhere above the definition of this hotkey.

The $ prefix has no effect for mouse hotkeys, since they always use the mouse hook. It also has no effect for hotkeys which already require the keyboard hook, including any keyboard hotkeys with the tilde (~) or wildcard (*) modifiers, key-up hotkeys and custom combinations. To determine whether a particular hotkey uses the keyboard hook, use ListHotkeys.

[v1.1.06+]:#InputLevel and SendLevel provide additional control over which hotkeys and hotstrings are triggered by the Send command.

UP

The word UP may follow the name of a hotkey to cause the hotkey to fire upon release of the key rather than when the key is pressed down. The following example remaps the left key to become the left key:

*LWin::Send {LControl down} *LWin Up::Send {LControl up}

"Up" can also be used with normal hotkeys as in this example: .

It also works with combination hotkeys (e.g. )

Limitations: 1) "Up" does not work with joystick buttons; and 2) An "Up" hotkey without a normal/down counterpart hotkey will completely take over that key to prevent it from getting stuck down. One way to prevent this is to add a tilde prefix (e.g. )

«Up» hotkeys and their key-down counterparts (if any) always use the keyboard hook.

On a related note, a technique similar to the above is to make a hotkey into a prefix key. The advantage is that although the hotkey will fire upon release, it will do so only if you did not press any other key while it was held down. For example:

LControl & F1::return ; Make left-control a prefix by using it in front of "&" at least once. LControl::MsgBox You released LControl without having used it to modify any other key.

Note: See the Key List for a complete list of keyboard keys and mouse/joystick buttons.

Multiple hotkeys can be stacked vertically to have them perform the same action. For example:

^Numpad0:: ^Numpad1:: MsgBox Pressing either Control+Numpad0 or Control+Numpad1 will display this message. return

A key or key-combination can be disabled for the entire system by having it do nothing. The following example disables the right-side key:

RWin::return

Context-sensitive Hotkeys

The directives #IfWinActive/Exist and #If can be used to make a hotkey perform a different action (or none at all) depending on a specific condition. For example:

#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») WheelUp::Send {Volume_Up} ; Wheel over taskbar: increase/decrease volume. WheelDown::Send {Volume_Down} ;

Custom Combinations

You can define a custom combination of two keys (except joystick buttons) by using " & " between them. In the below example, you would hold down Numpad0 then press the second key to trigger the hotkey:

Numpad0 & Numpad1::MsgBox You pressed Numpad1 while holding down Numpad0. Numpad0 & Numpad2::Run Notepad

The prefix key loses its native function: In the above example, Numpad0 becomes a prefix key; but this also causes Numpad0 to lose its original/native function when it is pressed by itself. To avoid this, a script may configure Numpad0 to perform a new action such as one of the following:

Numpad0::WinMaximize A ; Maximize the active/foreground window. Numpad0::Send {Numpad0} ; Make the release of Numpad0 produce a Numpad0 keystroke. See comment below.

Fire on release: The presence of one of the above custom combination hotkeys causes the release of Numpad0 to perform the indicated action, but only if you did not press any other keys while Numpad0 was being held down. [v1.1.14+]: This behaviour can be avoided by applying the tilde prefix to either hotkey.

Modifiers: Unlike a normal hotkey, custom combinations act as though they have the wildcard (*) modifier by default. For example, will activate even if or is held down when and are pressed, whereas would be activated only by + and not ++.

For standard modifier keys, normal hotkeys typically work as well or better than «custom» combinations. For example, is recommended over .

Combinations of three or more keys are not supported. Combinations which your keyboard hardware supports can usually be detected by using #If and GetKeyState, but the results may be inconsistent. For example:

; Press AppsKey and Alt in any order, then slash (/). #if GetKeyState(«AppsKey», «P») Alt & /::MsgBox Hotkey activated. ; If the keys are swapped, Alt must be pressed first (use one at a time): #if GetKeyState(«Alt», «P») AppsKey & /::MsgBox Hotkey activated. ; [ & ] & \:: #if GetKeyState(«[«) && GetKeyState(«]») \::MsgBox

Keyboard hook: Custom combinations involving keyboard keys always use the keyboard hook, as do any hotkeys which use the prefix key as a suffix. For example, causes to always use the hook.

Other Features

NumLock, CapsLock, and ScrollLock: These keys may be forced to be "AlwaysOn" or "AlwaysOff". For example: .

Overriding Explorer’s hotkeys: Windows’ built-in hotkeys such as + (#e) and + (#r) can be individually overridden simply by assigning them to an action in the script.

See the override page for details.

Substitutes for Alt-Tab: Hotkeys can provide an alternate means of alt-tabbing. For example, the following two hotkeys allow you to alt-tab with your right hand:

RControl & RShift::AltTab ; Hold down right-control then press right-shift repeatedly to move forward. RControl & Enter::ShiftAltTab ; Without even having to release right-control, press Enter to reverse direction.

For more details, see Alt-Tab.

Mouse Wheel Hotkeys

Hotkeys that fire upon turning the mouse wheel are supported via the key names WheelDown and WheelUp. [v1.0.48+]: WheelLeft and WheelRight are also supported, but have no effect on operating systems older than Windows Vista. Here are some examples of mouse wheel hotkeys:

MButton & WheelDown::MsgBox You turned the mouse wheel down while holding down the middle button. ^!WheelUp::MsgBox You rotated the wheel up while holding down Control+Alt.

[v1.0.43.03+]: The built-in variable A_EventInfo contains the amount by which the wheel was turned, which is typically 1. However, A_EventInfo can be greater or less than 1 under the following circumstances:

  • If the mouse hardware reports distances of less than one notch, A_EventInfo may contain 0;
  • If the wheel is being turned quickly (depending on type of mouse), A_EventInfo may be greater than 1. A hotkey like the following can help analyze your mouse: .

Some of the most useful hotkeys for the mouse wheel involve alternate modes of scrolling a window’s text. For example, the following pair of hotkeys scrolls horizontally instead of vertically when you turn the wheel while holding down the left key:

~LControl & WheelUp:: ; Scroll left. ControlGetFocus, fcontrol, A Loop 2 ; <— Increase this value to scroll faster. SendMessage, 0x114, 0, 0, %fcontrol%, A ; 0x114 is WM_HSCROLL and the 0 after it is SB_LINELEFT. return ~LControl & WheelDown:: ; Scroll right. ControlGetFocus, fcontrol, A Loop 2 ; <— Increase this value to scroll faster. SendMessage, 0x114, 1, 0, %fcontrol%, A ; 0x114 is WM_HSCROLL and the 1 after it is SB_LINERIGHT. return

Finally, since mouse wheel hotkeys generate only down-events (never up-events), they cannot be used as key-up hotkeys.

Each numpad key can be made to launch two different hotkey subroutines depending on the state of . Alternatively, a numpad key can be made to launch the same subroutine regardless of the state. For example:

NumpadEnd:: Numpad1:: MsgBox, This hotkey is launched regardless of whether NumLock is on. return

If the tilde (~) operator is used with a prefix key even once, it changes the behavior of that prefix key for all combinations. For example, in both of the below hotkeys, the active window will receive all right-clicks even though only one of the definitions contains a tilde:

~RButton & LButton::MsgBox You pressed the left mouse button while holding down the right. RButton & WheelUp::MsgBox You turned the mouse wheel up while holding down the right button.

The Suspend command can temporarily disable all hotkeys except for ones you make exempt. For greater selectivity, use #IfWinActive/Exist.

By means of the Hotkey command, hotkeys can be created dynamically while the script is running. The Hotkey command can also modify, disable, or enable the script’s existing hotkeys individually.

Joystick hotkeys do not currently support modifier prefixes such as ^ () and # (). However, you can use GetKeyState to mimic this effect as shown in the following example:

Joy2:: if not GetKeyState("Control") ; Neither the left nor right Control key is down. return ; i.e. Do nothing. MsgBox You pressed the first joystick’s second button while holding down the Control key. return

There may be times when a hotkey should wait for its own modifier keys to be released before continuing. Consider the following example:

^!s::Send {Delete}

Pressing ++ would cause the system to behave as though you pressed ++ (due to the system’s aggressive detection of ++). To work around this, use KeyWait to wait for the keys to be released; for example:

^!s:: KeyWait Control KeyWait Alt Send {Delete} return

If a hotkey label like produces an error like "Invalid Hotkey", your system’s keyboard layout/language might not have the specified character ("Z" in this case). Try using a different character that you know exists in your keyboard layout.

A hotkey label can be used as the target of a Gosub or Goto. For example: .

One common use for hotkeys is to start and stop a repeating action, such as a series of keystrokes or mouse clicks. For an example of this, see this FAQ topic.

Finally, each script is quasi multi-threaded, which allows a new hotkey to be launched even when a previous hotkey subroutine is still running. For example, new hotkeys can be launched even while a MsgBox is being displayed by the current hotkey.

Alt-Tab Hotkeys

Each Alt-Tab hotkey must be a combination of two keys, which is typically achieved via the ampersand symbol (&). In the following example, you would hold down the right key and press or to navigate the alt-tab menu:

RAlt & j::AltTab RAlt & k::ShiftAltTab

AltTab and ShiftAltTab are two of the special commands that are only recognized when used on the same line as a hotkey. Here is the complete list:

AltTab: If the alt-tab menu is visible, move forward in it. Otherwise, display the menu (only if the hotkey is an "&" combination of two keys; otherwise, it does nothing).

ShiftAltTab: Same as above except move backward in the menu.

AltTabAndMenu: If the alt-tab menu is visible, move forward in it. Otherwise, display the menu.

AltTabMenuDismiss: Close the Alt-tab menu.

To illustrate the above, the mouse wheel can be made into an entire substitute for Alt-tab. With the following hotkeys in effect, clicking the middle button displays the menu and turning the wheel navigates through it:

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

To cancel a hotkey-invoked Alt-tab menu without activating the selected window, use a hotkey such as the following. It might require adjustment depending on: 1) the means by which the alt-tab menu was originally displayed; and 2) whether the script has the keyboard hook installed.

LCtrl & CapsLock::AltTab !MButton:: ; Middle mouse button. The ! prefix makes it fire while the Alt key is down (which it is if the alt-tab menu is visible). IfWinExist ahk_class #32771 ; Indicates that the alt-tab menu is present on the screen. Send !{Escape}{Alt up} return

Currently, all special Alt-tab actions must be assigned directly to a hotkey as in the examples above (i.e.

they cannot be used as though they were commands). They are not affected by #IfWin or #If.

Custom alt-tab actions can also be created via hotkeys. In the following example, you would press to display the menu and advance forward in it. Then you would press to activate the selected window (or press to cancel):

*F1::Send {Alt down}{tab} ; Asterisk is required in this case. !F2::Send {Alt up} ; Release the Alt key, which activates the selected window. ~*Escape:: IfWinExist ahk_class #32771 Send {Escape}{Alt up} ; Cancel the menu without activating the selected window. return

Function Hotkeys [v1.1.20+]

One or more hotkeys can be assigned a function by simply defining it immediately after the hotkey label as in this example:

; Ctrl+Shift+O to open containing folder in Explorer. ; Ctrl+Shift+E to open folder with current file selected. ; Supports SciTE and Notepad++. ^+o:: ^+e:: editor_open_folder() { WinGetTitle, path, A if RegExMatch(path, «\*?\K(.*)\\[^\\]+(?= [-*] )», path) if (FileExist(path) && A_ThisHotkey = «^+e») Run explorer.exe /select`,»%path%» else Run explorer.exe «%path1%» }

[v1.1.28+]: Hotstrings can also be defined this way. Multiple hotkeys or hotstrings can be stacked together to call the same function.

There must only be whitespace, comments or directives between the hotkey/hotstring labels or label and the function. Hotkey/hotstring labels defined this way are not visible to IsLabel, Gosub or other commands; however, the auto-execute section ends at the first hotkey/hotstring even if it is assigned a function.

The main benefit of using a function is that local variables can be used, which avoids conflicts when two or more hotkeys use the same variable names for different purposes. It also encourages self-documenting hotkeys, like in the code above where the function name describes the hotkey.

The Hotkey command can also be used to assign a function or function object to a hotkey.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *