Beispiel #1
0
        private IntPtr KeyHookProc(int nCode, IntPtr wParam, IntPtr lParam)
        {
            Hook.KBDLLHOOKSTRUCT   hs = (Hook.KBDLLHOOKSTRUCT)Marshal.PtrToStructure(lParam, typeof(Hook.KBDLLHOOKSTRUCT));
            Message.WindowsMessage wm = (Message.WindowsMessage)wParam;
            if (nCode >= 0 && (_key == 0 || _key == hs.vkCode))
            {
                Keyboard.VirtualKeyStates key      = (Keyboard.VirtualKeyStates)hs.vkCode;
                Keyboard.ScanCodes        scanCode = (Keyboard.ScanCodes)hs.scanCode;
                KeyboardState.KeyStatus   status;
                switch (wm)
                {
                case Message.WindowsMessage.KEYDOWN:
                case Message.WindowsMessage.SYSKEYDOWN:
                    status = KeyboardState.KeyStatus.Down;
                    break;

                case Message.WindowsMessage.KEYUP:
                case Message.WindowsMessage.SYSKEYUP:
                    status = KeyboardState.KeyStatus.Up;
                    break;

                default:
                    status = KeyboardState.KeyStatus.None;
                    break;
                }
                TimeSpan      time = TimeSpan.FromMilliseconds(hs.time);
                KeyboardState ks   = KeyboardState.CreateCurrent(key, scanCode, status, time);
                switch (ks.Status)
                {
                case KeyboardState.KeyStatus.Down:
                    KeyAny?.Invoke(this, ks);
                    KeyPress?.Invoke(this, ks);
                    KeyDown?.Invoke(this, ks);
                    break;

                case KeyboardState.KeyStatus.Hold:
                    KeyAny?.Invoke(this, ks);
                    KeyPress?.Invoke(this, ks);
                    KeyHold?.Invoke(this, ks);
                    break;

                case KeyboardState.KeyStatus.Up:
                    KeyAny?.Invoke(this, ks);
                    KeyUp?.Invoke(this, ks);
                    break;

                default:
                    KeyAny?.Invoke(this, ks);
                    break;
                }
                if (CallNextHook is null || CallNextHook(this, ks))
                {
                    return(Hook.CallNextHookEx(_kHHook, nCode, wParam, lParam));
                }
                else
                {
                    return(_kHHook);
                }
            }
Beispiel #2
0
 protected void KeyEvent(KeyCode Key)
 {
     if ((NativeMethods.GetAsyncKeyState(Key) & 0x1) != 0)
     {
         KeyDown?.Invoke(this);
     }
     if ((NativeMethods.GetAsyncKeyState(Key) & 0x8000) != 0)
     {
         KeyHold?.Invoke(this);
     }
 }
        public override void Update(GameTime gameTime)
        {
            base.Update(gameTime);

            if (!Enabled)
            {
                return;
            }

            var state = Keyboard.GetState();

            var oldPressed = _previousState.GetPressedKeys();
            var newPressed = state.GetPressedKeys();

            for (var i = 0; i < oldPressed.Length; ++i)
            {
                if (Array.IndexOf(newPressed, oldPressed[i]) < 0)
                {
                    var e = new KeyEventArgs(oldPressed[i], KeyState.Down, KeyState.Up);

                    KeyUp?.Invoke(this, e);
                }
            }

            for (var i = 0; i < newPressed.Length; ++i)
            {
                if (Array.IndexOf(oldPressed, newPressed[i]) < 0)
                {
                    var e = new KeyEventArgs(newPressed[i], KeyState.Up, KeyState.Down);

                    KeyDown?.Invoke(this, e);
                }
                else
                {
                    var e = new KeyEventArgs(newPressed[i], KeyState.Down, KeyState.Down);

                    KeyHold?.Invoke(this, e);
                }
            }

            _previousState = state;
        }