Тема: AHK: Установка хуков на определенные клавиши, и запись их в переменную
Как переделать чтобы скрипт устанавливал хук только на определенные клавиши, указанные в переменной, и записывал их в переменную? Например, в первой переменной пишем Ctrl+f, или f3, или G, или Ctrl+alt+e, и при т.д. И при при нажатии любой из них, клавиша пишется в таком же виде в другую переменную. Срабатывание скрипта предполагается в определенном окне.
CoordMode, ToolTip
hHookKeybd := DllCall("SetWindowsHookEx"
, Int, WH_KEYBOARD_LL := 13
, Ptr, RegisterCallback("LowLevelKeyboardProc", "Fast")
, Ptr, DllCall("GetModuleHandle", UInt, 0, Ptr)
, UInt, 0, Ptr)
OnExit( Func("Exit").Bind(hHookKeybd) )
Return
Esc::ExitApp
Exit(hHookKeybd) {
DllCall("UnhookWindowsHookEx", Ptr, hHookKeybd)
}
LowLevelKeyboardProc(nCode, wParam, lParam) {
static oMem := [], lpData, size := VarSetCapacity(lpData, 16, 0)
DllCall("RtlMoveMemory", Ptr, &lpData, Ptr, lParam, Ptr, size)
oMem.Push([wParam, &lpData])
timer := Func("EventHandling").Bind(oMem) ; во избежание фризов клавиатуры обработка событий должна
SetTimer, % timer, -10 ; происходить обязательно по таймеру, а не в теле этой функции
Return DllCall("CallNextHookEx", Ptr, 0, Int, nCode, Ptr, wParam, Ptr, lParam)
}
EventHandling(oMem) {
static oMsg := {0x100: "WM_KEYDOWN", 0x101: "WM_KEYUP", 0x104: "WM_SYSKEYDOWN", 0x105: "WM_SYSKEYUP"}
, oMembers := ["vk", "sc", "flags", "time"]
, oFlagOffsets := {LLKHF_EXTENDED: 0, LLKHF_LOWER_IL_INJECTED: 1, LLKHF_INJECTED: 4, LLKHF_ALTDOWN: 5, LLKHF_UP: 7}
while (oMem[1] != "") {
key := oMem.RemoveAt(1)
wp := key[1], lp := key[2]
msg := wp
for k, v in oMembers
%v% := NumGet(lp + (k - 1)*4, "UInt")
for k, v in oFlagOffsets
%k% := (flags >> v) & 1
sc |= LLKHF_EXTENDED << 8
; текстовые значения в oMembers и названия ключей в oFlagOffsets являются
; названиями переменных, в которых теперь находятся соответствующие значения:
ToolTip % "Message = " . oMsg[msg] . "`n"
. "vkCode = " . Format("{:#x}", vk) . "`n"
. "scCode = " . Format("{:#x}", sc) . "`n"
. "pressed = " . !LLKHF_UP . "`n"
. "Time = " . time . "`n"
. "Injected = " . LLKHF_INJECTED . "`n"
. "Lower_IL_Injected = " . LLKHF_LOWER_IL_INJECTED, 0, 0
}
}