Пример #1
0
        private static void KeyboardHookHandler(object data)
        {
            if (allHotkeysSuspendCount > 0)
            {
                return;
            }

            lock (keysLocker)
            {
                KeyboardHookData    hookData     = (KeyboardHookData)data;
                KeyboardMessageType keyState     = hookData.keyState;
                KBDLLHOOKSTRUCT     keyboardData = hookData.keyData;

                Keys newKeys         = (Keys)keyboardData.vkCode;
                Keys newModifierKeys = HotkeyUtils.GetModifierKeys(newKeys);

                if (keyState == KeyboardMessageType.WM_KEYDOWN || keyState == KeyboardMessageType.WM_SYSKEYDOWN)
                {
                    pressedModifierKeys |= newModifierKeys;

                    if (newKeys != pressedKey)
                    {
                        pressedKey = newKeys;
                        HandleHotkeys(newModifierKeys == Keys.None ? pressedKey : Keys.None);
                    }
                }
                else if (keyState == KeyboardMessageType.WM_KEYUP || keyState == KeyboardMessageType.WM_SYSKEYUP)
                {
                    pressedKey           = Keys.None;
                    pressedModifierKeys &= ~newModifierKeys;
                }
            }
        }
Пример #2
0
        private static IntPtr KeyboardHook(int code, IntPtr wParam, IntPtr lParam)
        {
            KeyboardMessageType keyState = (KeyboardMessageType)wParam;

            if (code >= 0 &&
                (keyState == KeyboardMessageType.WM_KEYDOWN ||
                 keyState == KeyboardMessageType.WM_KEYUP ||
                 keyState == KeyboardMessageType.WM_SYSKEYDOWN ||
                 keyState == KeyboardMessageType.WM_SYSKEYUP))
            {
                ThreadPool.QueueUserWorkItem(
                    KeyboardHookHandler,
                    new KeyboardHookData(keyState, Marshal.PtrToStructure <KBDLLHOOKSTRUCT>(lParam)));
            }

            return(CallNextHookEx(keyboardHook, code, wParam, lParam));
        }
Пример #3
0
 public KeyboardHookData(KeyboardMessageType keyState, KBDLLHOOKSTRUCT keyData)
 {
     this.keyState = keyState;
     this.keyData  = keyData;
 }