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)); }
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)); }
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)); }