private IntPtr LowLevelKeyboardProc(int nCode, IntPtr wParam, IntPtr lParam) { var fEatKeyStroke = false; var wParamTyped = wParam.ToInt32(); // ReSharper disable once InvertIf if (Enum.IsDefined(typeof(KeyboardState), wParamTyped)) { var o = Marshal.PtrToStructure(lParam, typeof(LowLevelKeyboardInputEvent)); var p = (LowLevelKeyboardInputEvent)o; var eventArguments = new GlobalKeyboardHookEventArgs(p, (KeyboardState)wParamTyped); var handler = KeyboardPressed; handler?.Invoke(this, eventArguments); fEatKeyStroke = eventArguments.Handled; } return(fEatKeyStroke ? (IntPtr)1 : CallNextHookEx(IntPtr.Zero, nCode, wParam, lParam)); }
private void OnKeyPressed(object sender, GlobalKeyboardHookEventArgs e) { const int ctrlKeyCode = 162; const int altKeyCode = 164; var keyCode = e.KeyboardData.VirtualCode; if (keyCode == ctrlKeyCode || keyCode == altKeyCode) { if ( !ModKeyAltDown && keyCode == altKeyCode && ( e.KeyboardState == GlobalKeyboardHook.KeyboardState.SysKeyDown || e.KeyboardState == GlobalKeyboardHook.KeyboardState.KeyDown ) ) { ModKeyAltDown = true; } if ( !ModKeyCtrlDown && keyCode == ctrlKeyCode && ( e.KeyboardState == GlobalKeyboardHook.KeyboardState.SysKeyDown || e.KeyboardState == GlobalKeyboardHook.KeyboardState.KeyDown ) ) { ModKeyCtrlDown = true; } if ( ModKeyAltDown && keyCode == altKeyCode && ( e.KeyboardState == GlobalKeyboardHook.KeyboardState.SysKeyUp || e.KeyboardState == GlobalKeyboardHook.KeyboardState.KeyUp ) ) { ModKeyAltDown = false; } if ( ModKeyCtrlDown && keyCode == ctrlKeyCode && ( e.KeyboardState == GlobalKeyboardHook.KeyboardState.SysKeyUp || e.KeyboardState == GlobalKeyboardHook.KeyboardState.KeyUp ) ) { ModKeyCtrlDown = false; } } else { var tModCtrl = ModKeyCtrlDown ? ModKeys.ModCtrl : 0; var tModAlt = ModKeyAltDown ? ModKeys.ModAlt : 0; var modKey = tModCtrl | tModAlt; Debug.WriteLine(keyCode); var hotkey = new HotkeyButton((Keys)keyCode, (int)modKey); if (!HotkeyMap.ContainsKey(hotkey)) { return; } if ( e.KeyboardState == GlobalKeyboardHook.KeyboardState.SysKeyDown || e.KeyboardState == GlobalKeyboardHook.KeyboardState.KeyUp ) { AudioPlayer.Instance.ProcessHotkey(HotkeyMap[hotkey]); } e.Handled = true; } }