private static bool RedirectKey(int eventType, Extern.KBDLLHOOKSTRUCT kbd) { bool isInjected = kbd.flags.HasFlag(Extern.KBDLLHOOKSTRUCTFlags.LLKHF_INJECTED); if (isInjected) { return(false); } bool isKeyUp; switch (eventType) { case Extern.WM_KEYDOWN: case Extern.WM_SYSKEYDOWN: isKeyUp = false; break; case Extern.WM_KEYUP: case Extern.WM_SYSKEYUP: isKeyUp = true; break; default: return(false); } bool isExtended = kbd.flags.HasFlag(Extern.KBDLLHOOKSTRUCTFlags.LLKHF_EXTENDED); return(keyConfiguration.SendAssignedKey((byte)(kbd.scanCode & 0xff), isExtended, isKeyUp)); }
private static IntPtr HookCallback(int nCode, IntPtr wParam, ref Extern.KBDLLHOOKSTRUCT kbd) { if (nCode >= 0) { if (mainForm.HandleKeyEvent((int)wParam, kbd)) { return((IntPtr)1); } bool isScrollLock = Extern.GetKeyState((int)Keys.Scroll) != 0; if (isScrollLock && RedirectKey((int)wParam, kbd)) { return((IntPtr)1); } } return(Extern.CallNextHookEx(_hookID, nCode, wParam, ref kbd)); }
public bool HandleKeyEvent(int eventType, Extern.KBDLLHOOKSTRUCT kbd) { if (!ContainsFocus) { return(false); } if (currentTextBox == null) { return(false); } if (eventType != Extern.WM_KEYDOWN && eventType != Extern.WM_SYSKEYDOWN) { return(false); } var key = (Keys)kbd.vkCode; if (key == Keys.Scroll) { return(false); } var action = (Actions)currentTextBox.Tag; if (action == Actions.None) { return(false); } bool isExtended = kbd.flags.HasFlag(Extern.KBDLLHOOKSTRUCTFlags.LLKHF_EXTENDED); Debug.WriteLine("vkCode: " + key + "(" + kbd.vkCode + "); scanCode: " + kbd.scanCode + "; flags: " + kbd.flags); keyConfiguration.Assign(action, key, (byte)(kbd.scanCode & 0xff), isExtended); updateTextBoxes(); ActionTestTextBox.Focus(); return(true); }