private static void DumpState(LowLevelKeyboardProcEventArgs e) { if (e.ControlKeyState()) Console.Write("Control-"); if (e.ShiftKeyState) Console.Write("Shift-"); if (e.AltKeyState) Console.Write("Alt-"); if (e.WindowsKeyState) Console.Write("Windows-"); if (e.MenuKeyState) Console.Write("Menu-"); if (!e.IsModifier) { Console.Write($"{(Keys)e.KeyCode}"); } Console.WriteLine(e.KeyUp() ? " released" : " pressed"); }
private static void InterceptKeys_KeyUp(object sender, LowLevelKeyboardProcEventArgs e) { DumpState(e); }
private IntPtr LowLevelKeyPressHandler(int nCode, IntPtr wParam, IntPtr lParam) { if (nCode < 0 ) return CallNextHookEx(_hookId, nCode, wParam, lParam); var keyData = (KBDLLHOOKSTRUCT)Marshal.PtrToStructure(lParam, typeof(KBDLLHOOKSTRUCT)); var keyDown = keyData.KeyDown(); _keyStates[(Keys)keyData.vkCode] = keyDown; var evt = new LowLevelKeyboardProcEventArgs(keyData.vkCode, keyData.scanCode, keyData.flags, _keyStates); if (keyDown) { if (CheckHotKeys()) nCode = -1; // We've used this hotkey so stop it propagating any further KeyDown?.Invoke(null, evt); } else KeyUp?.Invoke(null, evt); return CallNextHookEx(_hookId, nCode, wParam, lParam); }