Тема: AHK: Аналог "мертвых клавиш" и режима "залипания" клавиш
Побродил по коллекции скриптов, и наткнулся на тему AutoHotkey: скрипт для ввода немецких умляутов, и решил рассказать о способе ввода спецсимволов, который использую я.
Я использую метод "мертвых клавиш", когда я нажимаю на такую "мертвую" клавишу, отпускаю ее, затем нажимаю, например, на клавишу "А" и у меня набирается "?". Или нажимаю мертвую клавишу, отпускаю ее, потом нажимаю "Shift+A", и у меня набирается "?". Вот пример скрипта:
CapsLock::return
; Строка выше для того, чтобы в скрипте числилась горячая клавиша с именем "CapsLock".
; Режим CapsLock можно включать, нажимая на клавишу CapsLock с модификатором, например, Shift+CapsLock
#If A_PriorHotkey = "CapsLock"
vk41::Send, ? ; A
+vk41::Send, ? ; Shift+A
vk53::Send, ? ; S
vk55::Send, ? ; U
+vk55::Send, ? ; Shift+U
vk4F::Send, ? ; O
+vk4F::Send, ? ; Shift+O
#IfОсобенности скрипта:
- Скрипт требует использования AutoHotkey_L.
- При записи "vk41::Send, ? " очень важно, чтобы скрипт был сохранен в кодировке UTF-8, т.к. вместо ? вы увидите кракозябр.
- Еще надо понимать, что эти комбо с мертвой клавишей будут работать во всех раскладках!
- А еще, если уж была нажата мертвая клавиша, то вывести ее из такого режима можно лишь нажав на одну из горячих клавиш, перечисленных в скрипте. Т.е. нажатая мертвая клавиша может помниться скриптом очень долго — пока не изменится значение переменной A_PriorHotkey. Т.е. можно нажать на CapsLock (в нашем случае), и набирать "Viele kleine Le?…" и только на букве u сработает горячая клавиша.
Это не баг, а фича. ![]()
= = = = = = = = = = = =
Но это то, что использую я для слепого скоростного набора. Если же требуется просто иметь возможность вводить одни и те же символы с разными диакритическими знаками, то скрипт можно делать вот такого вида:
>!vkBA::return ; RAlt+:
>!vk36::return ; RAlt+^
#If A_PriorHotkey = ">!vkBA"
vk41::Send, ? ; A
+vk41::Send, ? ; Shift+A
vk55::Send, ? ; U
+vk55::Send, ? ; Shift+U
vk4F::Send, ? ; O
+vk4F::Send, ? ; Shift+O
#If
#If A_PriorHotkey = ">!vk36"
vk41::Send, ? ; A
+vk41::Send, ? ; Shift+A
vk55::Send, ? ; U
+vk55::Send, ? ; Shift+U
vk4F::Send, ? ; O
+vk4F::Send, ? ; Shift+O
#IfТо есть, если мы хотим набрать ?, то нам нужно сначала нажать RAlt+: (клавиша двоеточие в английской раскладке), а затем нажать на клавишу "О". Если мы хотим набирать ?, то нам нужно сначала нажать RAlt+^ (клавиша со знаком крышечки в английской раскладке), а потом нажать на клавишу "О". Если хотим набрать ?, то жмем сначала RAlt+:, а затем Shift+U.
= = = = = = = = = = = =
Еще в своем наборе я использую залипание клавиши Shift. Так, для того, чтобы набрать заглавную букву, мне не нужно удерживать нажатой клавишу Shift, т.е. фактически, я нажимаю клавишу Shift перед набираемым словом, и слово набирается с большой буквы. Вот скрипт:
~Shift::return
#If A_PriorHotkey = "~Shift"
vk51::+vk51 ; Й
vk57::+vk57 ; Ц
vk45::+vk45 ; У
vk52::+vk52 ; К
vk54::+vk54 ; Е
vk59::+vk59 ; Н
vk55::+vk55 ; Г
vk49::+vk49 ; Ш
vk4F::+vk4F ; Щ
vk50::+vk50 ; З
vkDB::+vkDB ; Х
vkDD::+vkDD ; Ъ
vk41::+vk41 ; Ф
vk53::+vk53 ; Ы
vk44::+vk44 ; В
vk46::+vk46 ; А
vk47::+vk47 ; П
vk48::+vk48 ; Р
vk4A::+vk4A ; О
vk4B::+vk4B ; Л
vk4C::+vk4C ; Д
vkBA::+vkBA ; Ж
vkDE::+vkDE ; Э
vk5A::+vk5A ; Я
vk58::+vk58 ; Ч
vk43::+vk43 ; С
vk56::+vk56 ; М
vk42::+vk42 ; И
vk4E::+vk4E ; Т
vk4D::+vk4D ; Ь
vkBC::+vkBC ; Б
vkBE::+vkBE ; Ю
vkBF::+vkBF ; .
vkC0::+vkC0 ; Ё
vk31::+vk31 ; 1
vk32::+vk32 ; 2
vk33::+vk33 ; 3
vk34::+vk34 ; 4
vk35::+vk35 ; 5
vk36::+vk36 ; 6
vk37::+vk37 ; 7
vk38::+vk38 ; 8
vk39::+vk39 ; 9
vk30::+vk30 ; 0
vkBD::+vkBD ; -
vkBB::+vkBB ; =
#IfСкрипт работает во всех раскладках.
Ну вот, в общем-то и все, что я хотел сказать. Надеюсь, что все вышеописанное кому-нибудь пригодится. ![]()
upd: Блина, все Юникод-символы сожрались движком форума...
В общем, ребят, кто заинтересовался, качайте примеры в прикрепленном архиве. ![]()

