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

ФОРУМ (здесь можно обсудить эту статью, а также саму программу 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 При любом использовании материалов сайта обязательна ссылка на него как на источник информации, а также сохранение целостности и авторства материалов.