Beispiel #1
0
        private static int KeyboardCallBack(int code, WinAPI.User32.WindowsMessage wParam, ref WinAPI.User32.KeyboardHookStruct lParam)
        {
            // Если code < 0, мы не должны обрабатывать это сообщение системы
            if (code >= 0)
            {
                var key = KeyInterop.KeyFromVirtualKey((int)lParam.VKCode);
                KeyEventArgsCustom eventArgs = new KeyEventArgsCustom(key);

                // В зависимости от типа пришедшего сообщения вызовем то или иное событие
                if (lParam.dwExtraInfo == IntPtr.Zero)
                {
                    switch (wParam)
                    {
                    case WinAPI.User32.WindowsMessage.KeyDown:
                    case WinAPI.User32.WindowsMessage.SysKeyDown:
                        KeyDown?.Invoke(null, eventArgs);
                        break;

                    case WinAPI.User32.WindowsMessage.KeyUp:
                    case WinAPI.User32.WindowsMessage.SysKeyUp:
                        KeyUp?.Invoke(null, eventArgs);
                        break;
                    }
                }
                // Если событие помечено приложением как обработанное,
                // прервём дальнейшее распространение сообщения
                if (eventArgs.Handled)
                {
                    return(1);
                }
            }
            // Вызовем следующий обработчик
            return(WinAPI.User32.CallNextHookEx(_keyboardHookHandle, code, wParam, ref lParam));
        }
Beispiel #2
0
        private static void KeysUp(object sender, KeyEventArgsCustom e)
        {
            var eventArgs = new PressedKeysEventArgs(PressedKeys, e.Key);

            PressedKeys.Remove(e.Key);
            KeyUp?.Invoke(null, eventArgs);
            if (eventArgs.Handled)
            {
                e.Handled = true;
            }
        }
Beispiel #3
0
        private static void KeysDown(object sender, KeyEventArgsCustom e)
        {
            var eventArgs = new PressedKeysEventArgs(PressedKeys, e.Key);

            if (PressedKeys.Contains(e.Key))
            {
                KeysHolding?.Invoke(null, eventArgs);
                if (eventArgs.Handled)
                {
                    e.Handled = true;
                }
                return;
            }
            PressedKeys.Add(e.Key);
            KeyDown?.Invoke(null, eventArgs);
            if (eventArgs.Handled)
            {
                e.Handled = true;
            }
        }