Пример #1
0
        // returns true if event is handled
        private void ProcessKeyboardEvent(int nCode, IntPtr wParam, IntPtr lParam, out bool isHandled)
        {
            isHandled = false;
            try
            {
                if (nCode < 0)
                {
                    return;
                }

                bool isKeyDownEvent = false;
                switch (wParam.ToInt32())
                {
                case LowLevelAdapter.WM_KEYDOWN:
                case LowLevelAdapter.WM_SYSKEYDOWN:
                    isKeyDownEvent = true;
                    goto case LowLevelAdapter.WM_KEYUP;

                case LowLevelAdapter.WM_KEYUP:
                case LowLevelAdapter.WM_SYSKEYUP:

                    var keybdinput = (KEYBDINPUT)Marshal.PtrToStructure(lParam, typeof(KEYBDINPUT));
                    var keyData    = (Keys)keybdinput.Vk;

                    keyData |= LowLevelAdapter.KeyPressed(Keys.ControlKey) ? Keys.Control : 0;
                    keyData |= LowLevelAdapter.KeyPressed(Keys.Menu) ? Keys.Alt : 0;
                    keyData |= LowLevelAdapter.KeyPressed(Keys.ShiftKey) ? Keys.Shift : 0;

                    var winPressed = LowLevelAdapter.KeyPressed(Keys.LWin) || LowLevelAdapter.KeyPressed(Keys.RWin);

                    var args = new KeyboardEventArgs(keyData, winPressed, isKeyDownEvent ? KeyboardEventType.KeyDown : KeyboardEventType.KeyUp);
                    OnKeyboardEvent(args);

                    isHandled = args.Handled;
                    break;
                }
            }
            catch { }
        }