Ребинды для ОС Windows на AutoHotkey
Добавлено: 11 июл 2021, 17:37
Привет GeekBoards, привет сообщество!
Ниже будет черновик статьи про использование AHK(AutoHotkey) для софтварного ребинда клавиатуры под ОС Windows.
Кому интересна статья, прошу дать обратную связь по содержанию и ошибкам в тексте. Возможно надо что-то добавить?
После всех исправлений и корректировки прошу GeekBoards посмотреть, оценить и принять решение о публикации статьи на сайте.
Вступление
Вне зависимости от того, какая у Вас клавиатура, вероятнее всего у Вас возникало желание назначить на определенные кнопки свои собственные сочетания клавиш или просто поменять функции одной кнопки на другую. С переходом на 60% клавиатуры этот вопрос становится нетривиальным, в моем случае у меня есть несколько клавиатур разных производителей с разными опциями по программированию клавиш. У каких-то производителей эта опция реализована лучше, у каких-то хуже, а у каких-то совсем никак. Хотелось бы не зависеть от выбора решения предлагаемого производителем и найти обходной путь. К счастью, этот путь существует.
Чтобы не делать статью объемной и тяжелой для восприятия, я поставлю цель -- сделать программный ребинд обычной 60% клавиатуры, так, чтобы её поведение напоминало частично Vortex poker (10).
Для достижения поставленной цели нам понадобится AutoHotkey. К сожалению, этот софт является нативным только для Windows. Для других ОС, возможно я напишу отдельные статьи по ребинду в будущем.
AutoHotkey
AutoHotkey (autohotkey.com) -- издавна широко известное в узких кругах решение для написания макросов для Windows систем. Несмотря на большое сообщество и достаточно полную документацию, иногда возникают сложности в реализации тех или иных идей с помощью AutoHotkey.
Как это работает?
Кратко: Вы качаете дистрибутив с официального сайта, устанавливаете, пишете (или берете уже готовый) скрипт (с расширением файла .ahk), и запускаете его как обычный исполнительный файл (doubleclick или enter), в трее появляется соответствующая пиктограмма, всё – скрипт работает, в меню трея можно этот скрипт отключить.
За всеми дальнейшими подробностями прошу пожаловать на официальные ресурсы по AutoHotkey, т.к. это большая тема и она выходит за рамки данной статьи.
Для Windows 10 у AutoHotkey есть нюанс: некоторые вещи работают только при запуске скрипта из-под административной учетной записи.
Вы можете создать автономный .exe файл из .ahk скрипта с помощью стандартных средств AutoHotkey.
SCan codes
Перед тем как дать пример кода, важно понять что такое сканкоды (scancodes). Сканкоды используются как наименование какой-либо клавиши на клавиатуре. Хотя AutoHotkey поддерживает более простой метод обозначения клавиш (просто буква, например "f" или "ы"), использовать его повсеместно не рекомендуется. Причина в том, что конкретные буквы зависят от языковой раскладки, а сканкоды нет, таким образом посылая сканкод вместо простого имени клавиши, будет послан символ в зависимости от текущей языковой раскладки клавиатуры. Регистр также будет учтен.
Кратко: в большинстве случаев лучше использовать сканкоды. Как добывать сканкоды будет написано ближе к концу статьи.
Начальный скрипт
Ниже будет пример начального скрипта, который отключает клавишу CapsLock, для дальнейшего ее использования как модификатора, чтобы добиться ребинда стрелок на клавишах "i" "j" "k" "l".
Запустив этот скрипт, стандартная функция клавиши CapsLock перестанет работать, а сочетания клавиш CapsLock + i, j, k, l будут посылать нажатия соответствующих стрелок. {Blind} позволяет использовать другие клавиши модификаторы вместе с эмулируемой клавишей. Таким образом сделав Ctrl + Alt + CapsLock + i будет отработано Ctrl + Alt + CapsLock + Up.
У данного подохода в ОС Windows есть небольшой недостаток – работа встроенных низкоуровневых сочетаний клавиш, типа Win + L. Хорошая новость в том, что их можно отключить с помощью групповых политик или в реестре. Без отключения встроенного сочетания клавиш Win+L, Win + CapsLock + l приведет не к растягиванию окна на правую сторону экрана, а к блокировке сессии текущего пользователя.
Дальше
Разобравшись с начальным скриптом двигаемся дальше. Код, который будет ниже достаточно добавить в конец файла rebind.ahk и перезагрузить скрипт (запустить скрипт заново, т. к. с настройкой #SingleInstance force, возможен запуск только одной копии скрипта).
Ниже по тому же принципу, что и ранее прописаны ребинды для клавиш Home, End, PgUp, PgDown, F1-F12.
Еще дальше
Ниже еще немного ребиндов. Использованы мультимедийные клавиши для управления браузером, уже без {Blind}. Win + Esc посылает сочетания клавиш Alt+F4. На 60% клавиатурах так проще на мой взгляд закрывать окно чем нажимать CapsLock + Alt + 4.
Еще примеры
Можно биндить спецсимволы по известным альткодам. Пример:
Можно отключать неугодные клавиши или сочетания клавиш. Пример:
Где взять сканкоды?
Вместо таблицы с известными сканкодами рекомендую использовать скрипт (https://autohotkey.com/board/topic/2110 ... key/page-2)
Где взять референс для специальных клавиш, напимер для мультимедейных клавиш?
https://www.autohotkey.com/docs/KeyList.htm
Там есть даже AppsKey и все кнопки для управления плеером.
Послесловие
Используя примеры кода выше, Вы точно сможете прописать свои простые ребинды и таким образом в независимости от того, какая клавиатура у Вас подключена в данный момент, Вы получите свой набор ребиндов. За более чем 10 лет использования AutoHotkey у меня ни разу не было с ним проблем в отношении вылетов/ошибок, поэтому я могу его рекомендовать.
Недостатоком AutoHotkey по сравнению с ребиндом в прошивке клавиатуры, очевидно будет отсутствие ребиндов вне ОС Windows, а так же в сессиях при удаленных подключениях к другим ОС, в том числе и Windows. Однако при запуске скрипта на машине с Windows к которой Вы подключаетесь через RDP все работает как нужно.
Ниже будет черновик статьи про использование AHK(AutoHotkey) для софтварного ребинда клавиатуры под ОС Windows.
Кому интересна статья, прошу дать обратную связь по содержанию и ошибкам в тексте. Возможно надо что-то добавить?
После всех исправлений и корректировки прошу GeekBoards посмотреть, оценить и принять решение о публикации статьи на сайте.
Вступление
Вне зависимости от того, какая у Вас клавиатура, вероятнее всего у Вас возникало желание назначить на определенные кнопки свои собственные сочетания клавиш или просто поменять функции одной кнопки на другую. С переходом на 60% клавиатуры этот вопрос становится нетривиальным, в моем случае у меня есть несколько клавиатур разных производителей с разными опциями по программированию клавиш. У каких-то производителей эта опция реализована лучше, у каких-то хуже, а у каких-то совсем никак. Хотелось бы не зависеть от выбора решения предлагаемого производителем и найти обходной путь. К счастью, этот путь существует.
Чтобы не делать статью объемной и тяжелой для восприятия, я поставлю цель -- сделать программный ребинд обычной 60% клавиатуры, так, чтобы её поведение напоминало частично Vortex poker (10).
Для достижения поставленной цели нам понадобится AutoHotkey. К сожалению, этот софт является нативным только для Windows. Для других ОС, возможно я напишу отдельные статьи по ребинду в будущем.
AutoHotkey
AutoHotkey (autohotkey.com) -- издавна широко известное в узких кругах решение для написания макросов для Windows систем. Несмотря на большое сообщество и достаточно полную документацию, иногда возникают сложности в реализации тех или иных идей с помощью AutoHotkey.
Как это работает?
Кратко: Вы качаете дистрибутив с официального сайта, устанавливаете, пишете (или берете уже готовый) скрипт (с расширением файла .ahk), и запускаете его как обычный исполнительный файл (doubleclick или enter), в трее появляется соответствующая пиктограмма, всё – скрипт работает, в меню трея можно этот скрипт отключить.
За всеми дальнейшими подробностями прошу пожаловать на официальные ресурсы по AutoHotkey, т.к. это большая тема и она выходит за рамки данной статьи.
Для Windows 10 у AutoHotkey есть нюанс: некоторые вещи работают только при запуске скрипта из-под административной учетной записи.
Вы можете создать автономный .exe файл из .ahk скрипта с помощью стандартных средств AutoHotkey.
SCan codes
Перед тем как дать пример кода, важно понять что такое сканкоды (scancodes). Сканкоды используются как наименование какой-либо клавиши на клавиатуре. Хотя AutoHotkey поддерживает более простой метод обозначения клавиш (просто буква, например "f" или "ы"), использовать его повсеместно не рекомендуется. Причина в том, что конкретные буквы зависят от языковой раскладки, а сканкоды нет, таким образом посылая сканкод вместо простого имени клавиши, будет послан символ в зависимости от текущей языковой раскладки клавиатуры. Регистр также будет учтен.
Кратко: в большинстве случаев лучше использовать сканкоды. Как добывать сканкоды будет написано ближе к концу статьи.
Начальный скрипт
Ниже будет пример начального скрипта, который отключает клавишу CapsLock, для дальнейшего ее использования как модификатора, чтобы добиться ребинда стрелок на клавишах "i" "j" "k" "l".
Код: Выделить всё
;------------------------- rebind.ahk начало
;--- Script routine
;=== Хуки для клавиатуры и мыши
#installKeybdHook
#installMouseHook
;=== Сколько может быть послано нажатий без возникновения предупреждающего диалога
#MaxHotkeysPerInterval 100
;=== https://www.autohotkey.com/docs/commands/_NoEnv.htm
#NoEnv
;=== Не дает скрипту завершиться после запуска
#Persistent
;=== Не позволяет запускать более одной копии скрипта
#SingleInstance force
;=== Включить оповещния об ошибках (полезно при отладке)
#Warn
;=== Отключение CapsLock
SetCapsLockState, AlwaysOff
;=== Приоритет процесса -- высокий
Process Priority,,High
;=== Убираем задержки для нажатий клавиатуры и мыши, а также для окон.
SetKeyDelay, -1, -1, Play
SetMouseDelay, -1, Play
SetWinDelay, -1
;--- ARROWS
;=== Caps + i посылает Up (стрелка)
CapsLock & SC017::
Send {Blind}{Up}
return
;=== Caps + j посылает Left (стрелка)
CapsLock & SC024::
Send {Blind}{Left}
return
;=== Caps + k посылает Down (стрелка)
CapsLock & SC025::
Send {Blind}{Down}
return
;=== Caps + l посылает Right (стрелка)
CapsLock & SC026::
Send {Blind}{Right}
return
;------------------------- rebind.ahk конец
У данного подохода в ОС Windows есть небольшой недостаток – работа встроенных низкоуровневых сочетаний клавиш, типа Win + L. Хорошая новость в том, что их можно отключить с помощью групповых политик или в реестре. Без отключения встроенного сочетания клавиш Win+L, Win + CapsLock + l приведет не к растягиванию окна на правую сторону экрана, а к блокировке сессии текущего пользователя.
Дальше
Разобравшись с начальным скриптом двигаемся дальше. Код, который будет ниже достаточно добавить в конец файла rebind.ahk и перезагрузить скрипт (запустить скрипт заново, т. к. с настройкой #SingleInstance force, возможен запуск только одной копии скрипта).
Ниже по тому же принципу, что и ранее прописаны ребинды для клавиш Home, End, PgUp, PgDown, F1-F12.
Код: Выделить всё
;------------------------- дополнения I начало
;--- HOME END PGUP PGDOWN
;with u key -- PageUp
CapsLock & SC016::
Send {Blind}{PgUp}
return
;with o key -- PageDown
CapsLock & SC018::
Send {Blind}{PgDn}
return
; with h key -- home
CapsLock & SC023::
Send {Blind}{Home}
return
; with n key -- end
CapsLock & SC031::
Send {Blind}{End}
return
;--- F-KEYS
CapsLock & 1::
Send {Blind}{F1}
return
CapsLock & 2::
Send {Blind}{F2}
return
CapsLock & 3::
Send {Blind}{F3}
return
CapsLock & 4::
Send {Blind}{F4}
return
CapsLock & 5::
Send {Blind}{F5}
return
CapsLock & 6::
Send {Blind}{F6}
return
CapsLock & 7::
Send {Blind}{F7}
return
CapsLock & 8::
Send {Blind}{F8}
return
CapsLock & 9::
Send {Blind}{F9}
return
CapsLock & 0::
Send {Blind}{F10}
return
CapsLock & SC00C::
Send {Blind}{F11}
return
CapsLock & SC00D::
Send {Blind}{F12}
return
;------------------------- дополнения I конец
Ниже еще немного ребиндов. Использованы мультимедийные клавиши для управления браузером, уже без {Blind}. Win + Esc посылает сочетания клавиш Alt+F4. На 60% клавиатурах так проще на мой взгляд закрывать окно чем нажимать CapsLock + Alt + 4.
Код: Выделить всё
;------------------------- дополнения II начало
;--- UTILITY BINDINGS
; with Backspace key -- Del
CapsLock & BS::
Send {Blind}{Del}
return
;with P key -- PrintScreen
CapsLock & SC019::
Send {Blind}{PrintScreen}
return
; with Q key -- back
CapsLock & SC010::
Send {Browser_Back}
return
; with E key -- forward
CapsLock & SC012::
Send {Browser_Forward}
return
;Win + Esc = Alt + F4
#SC029::
#Esc::
Send !{F4}
return
;------------------------- дополнения II конец
Можно биндить спецсимволы по известным альткодам. Пример:
Код: Выделить всё
;=== Правый Альт + c = знак копирайта
RAlt & SC014:: ;mod+c = PrintCopyrightSign
SendEvent {U+2122}
return
Код: Выделить всё
;Win + f SC021
*#SC021::
;disabled by intent
return
Вместо таблицы с известными сканкодами рекомендую использовать скрипт (https://autohotkey.com/board/topic/2110 ... key/page-2)
Код: Выделить всё
;------------------------- scancode.ahk начало
SetFormat, Integer, Hex
Gui +ToolWindow -SysMenu +AlwaysOnTop
Gui, Font, s14 Bold, Arial
Gui, Add, Text, w100 h33 vSC 0x201 +Border, {SC000}
Gui, Show,, % "// ScanCode //////////"
Loop 9
OnMessage( 255+A_Index, "ScanCode" ) ; 0x100 to 0x108
Return
ScanCode( wParam, lParam ) {
Clipboard := "SC" SubStr((((lParam>>16) & 0xFF)+0xF000),-2)
GuiControl,, SC, %Clipboard%
}
;------------------------- scancode.ahk конец
https://www.autohotkey.com/docs/KeyList.htm
Там есть даже AppsKey и все кнопки для управления плеером.
Послесловие
Используя примеры кода выше, Вы точно сможете прописать свои простые ребинды и таким образом в независимости от того, какая клавиатура у Вас подключена в данный момент, Вы получите свой набор ребиндов. За более чем 10 лет использования AutoHotkey у меня ни разу не было с ним проблем в отношении вылетов/ошибок, поэтому я могу его рекомендовать.
Недостатоком AutoHotkey по сравнению с ребиндом в прошивке клавиатуры, очевидно будет отсутствие ребиндов вне ОС Windows, а так же в сессиях при удаленных подключениях к другим ОС, в том числе и Windows. Однако при запуске скрипта на машине с Windows к которой Вы подключаетесь через RDP все работает как нужно.