private int HookProc(int code, int wParam, ref User32.KeyboardHookStruct lParam)
        {
            if (code >= 0)
            {
                var key = (Keys)lParam.vkCode;
                if (HookedKeys.Contains(key))
                {
                    key = AddModifiers(key);

                    var kea = new KeyEventArgs(key);
                    if (wParam == User32.WM_KEYDOWN || wParam == User32.WM_SYSKEYDOWN)
                    {
                        KeyDown?.Invoke(this, kea);
                    }
                    if (wParam == User32.WM_KEYUP || wParam == User32.WM_SYSKEYUP)
                    {
                        KeyUp?.Invoke(this, kea);
                    }
                    if (kea.Handled)
                    {
                        return(1);
                    }
                }
            }
            return(User32.CallNextHookEx(_hhook, code, wParam, ref lParam));
        }
Exemple #2
0
        private int HookProc(int code, int wParam, ref User32.KeyboardHookStruct lParam)
        {
            if (code < 0)
            {
                return(User32.CallNextHookEx(_hhook, code, wParam, ref lParam));
            }

            if (IsWindowsKeyPressed())
            {
                return(User32.CallNextHookEx(_hhook, code, wParam, ref lParam));
            }

            var key = (Keys)lParam.vkCode;

            key = AddModifiers(key);

            var kea = new KeyEventArgs(key);

            if (wParam == User32.WM_KEYDOWN || wParam == User32.WM_SYSKEYDOWN)
            {
                KeyDown?.Invoke(this, kea);
            }
            else if (wParam == User32.WM_KEYUP || wParam == User32.WM_SYSKEYUP)
            {
                KeyUp?.Invoke(this, kea);
            }

            return(kea.Handled ? 1 : User32.CallNextHookEx(_hhook, code, wParam, ref lParam));
        }
Exemple #3
0
        private int keyHookProc(int nCode, int wParam, IntPtr lParam)
        {
            // 侦听键盘事件
            do
            {
                if (nCode < 0)
                {
                    break;
                }

                User32.KeyboardHookStruct MyKeyboardHookStruct = Marshal.PtrToStructure(lParam, typeof(User32.KeyboardHookStruct)) as User32.KeyboardHookStruct;
                if (MyKeyboardHookStruct == null)
                {
                    break;
                }

                int  vkey      = MyKeyboardHookStruct.vkCode;
                bool isKeyDown = (wParam == User32.WM_KEYDOWN) || (wParam == User32.WM_SYSKEYDOWN);

                bool isRepeat = false;
                if (mapKeyDown.ContainsKey(vkey) && mapKeyDown[vkey] == isKeyDown)
                {
                    isRepeat = true;
                }
                mapKeyDown[vkey] = isKeyDown;

                if (isRepeat)
                {
                    break;
                }

                if (mapVCtlKey.ContainsKey(vkey))
                {
                    if (isKeyDown)
                    {
                        keyData = keyData | (uint)mapVCtlKey[vkey];
                    }
                    else
                    {
                        keyData = keyData & (uint)~mapVCtlKey[vkey];
                    }
                }
                else
                {
                    Key key = KeyInterop.KeyFromVirtualKey(MyKeyboardHookStruct.vkCode);
                    if (isKeyDown)
                    {
                        keyData = keyData & 0xffffff00 | (byte)key;
                    }
                    else
                    {
                        keyData = keyData & 0xffffff00;
                    }
                }

                if (!isEnable)
                {
                    break;
                }

                //if (ShortcutBox.isGlobalEdit) {
                //	break;
                //}

                //if (isActivate || showSubWin) {
                //	break;
                //}

                if (!isKeyDown)
                {
                    break;
                }

                checkKey?.Invoke(keyData);
            } while (false);

            //如果返回1,则结束消息,这个消息到此为止,不再传递。
            //如果返回0或调用CallNextHookEx函数则消息出了这个钩子继续往下传递,也就是传给消息真正的接受者
            return(User32.CallNextHookEx(hKeyboardHook, nCode, wParam, lParam));
        }