Exemplo n.º 1
0
        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));
        }
Exemplo n.º 2
0
        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;
            }
        }