Тема: AHK: Удобное добавление горячих клавиш(vk code для буквенных) в скрипт
Часто приходится добавлять горячие клавиши в скрипты.
Иногда это буквенные клавиши, а поскольку используются 2 раскладки, хочется чтобы хоткей работал при любой.
Приходится писать виртуальные коды, например vk43:: вместо с::.
Раньше запускал отдельную программу для определения этих кодов, теперь, чтобы не отвлекаться, сочинил автозамену:
Пишем "{буква или имя клавиши на английском} vk@",
например "+^g vk@" → получаем →
+^vk47:: ;g
return
Код:
LetterCode := Object()
Letters = q,w,e,r,t,y,u,i,o,p,[,], a,s,d,f,g,h,j,k,l,`;,',\, z,x,c,v,b,n,m,`,.,/, tab,shift, ctrl,alt, CapsLock, Caps, space, win, WinKey, AppsKey, 0,1,2,3,4,5,6,7,8,9, F1,F2,F3,F4,F5,F6,F7,F8,F9,F10,F11,F12, ``, Esc, leftbackslash, Pgup,Pgdn,end,home, Left,Up,Right,Down, Enter, BackSpace, NumLock, Pause, Ins, Insert, Del, Delete
vkCodes = 51,57,45,52,54,59,55,49,4f,50,db,dd,41,53,44,46,47,48,4a,4b,4c,ba,de,dc,5a,58,43,56,42,4e,4d,bc,be,bf, 9, 10, 11, 12, 14, 14, 20, 5b, 5b, 5d, 30,31,32,33,34,35,36,37,38,39, 70,71,72,73,74,75,76,77,78,79,7a,7b, c0, 1b, e2, 21,22,23,24, 25,26,27,28, hd, h8, 90, 13, 2d, 2d, 2e, 2e
Loop, parse, Letters, `, , %A_Space%%A_Tab%
{
LetterCode[A_Index, 1]:=A_LoopField
}
Loop, parse, vkCodes, `, , %A_Space%%A_Tab%
{
LetterCode[A_Index, 2]:=A_LoopField
lenghArray:=A_Index
}
Return
::vk@::
ClipSaved:=Clipboard
WinGetClass, class, A
if (class="Notepad")
SendInput {BackSpace}{Shift Down}{Left}{Shift Up}^{vk43}
else
SendInput {BackSpace}{Shift Down}^{Left}{Shift Up}^{vk43}
Sleep 50
if (ClipSaved=Clipboard) {
MsgBox Буква не скопировалась
return
}
KeyLetter:=Clipboard
Clipboard:=ClipSaved
if KeyVK:=vk(KeyLetter, lenghArray, LetterCode)
SendInput vk%KeyVK%::{Space}`;{Space}%KeyLetter%`n`nreturn{Left}{Up}{Tab}
return
vk(KeyLetter, lenghArray, LetterCode) {
Loop, %lenghArray%
{
if (KeyLetter=LetterCode[A_Index, 1])
Return Key:=LetterCode[A_Index, 2]
}
Return
}