Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #NoEnv
- ; #Persistent
- SetBatchLines, -1
- OnExit, Unhook
- Hook_Key := SetWindowsHookEx(WH_KEYBOARD_LL:=13, RegisterCallback("LowLevelKeyboardProc"))
- if !Hook_Key
- ExitApp
- Gui, Add, Edit, w280 r16
- Gui, +AlwaysOnTop
- Gui, Show
- return
- F12::
- tooltip % WASD := !WASD
- KeyWait %A_ThisHotkey%
- return
- #If WASD
- w::
- a::
- s::
- d::
- tooltip %A_ThisHotkey%
- return
- #If
- Esc::
- GuiClose:
- ExitApp
- Unhook:
- UnhookWindowsHookEx(Hook_Key)
- ExitApp
- SetWindowsHookEx(idHook, pfn) { ; https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-setwindowshookexa
- return DllCall("SetWindowsHookEx"
- , "Int", idHook
- , "Ptr", pfn
- , "Ptr", DllCall("GetModuleHandle", "UInt", 0, "Ptr")
- , "UInt", 0
- , "Ptr")
- }
- UnhookWindowsHookEx(hHook) { ; https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-unhookwindowshookex
- return DllCall("UnhookWindowsHookEx", "Ptr", hHook)
- }
- CallNextHookEx(nCode, wParam, lParam, hHook = 0) { ; https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-callnexthookex
- return DllCall("CallNextHookEx", "UInt", hHook, "Int", nCode, "UInt", wParam, "UInt", lParam)
- }
- LowLevelKeyboardProc(nCode, wParam, lParam) { ; https://docs.microsoft.com/en-us/windows/win32/api/winuser/ns-winuser-kbdllhookstruct?redirectedfrom=MSDN
- global WASD
- Critical
- if (nCode = 0) {
- if (WASD && !(GetKeyName(Format("vk{:02x}", NumGet(lParam+0, "Int"))) ~= "^(Escape|F12|w|a|s|d|)$")) ; keyName
- ; if (WASD && !(Format("{:02X}", NumGet(lParam+0, "Int")) ~= "^(1B|7B|57|41|53|44)$")) ; vkCode
- return 1 ; 入力を破棄する
- }
- return CallNextHookEx(nCode, wParam, lParam)
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement