/// <summary> /// 键盘钩子处理函数 /// </summary> private int KeyboardHookProc(WH_CODE nCode, Int32 wParam, IntPtr lParam) { /*全局钩子应该这样设定 * KeyboardHookStruct MyKeyboardHookStruct = (KeyboardHookStruct)Marshal.PtrToStructure(lParam, typeof(KeyboardHookStruct)); */ // 定义为线程钩子时,wParam的值是击打的按键,与Keys里的对应按键相同 if ((nCode == (int)HC_CODE.HC_ACTION) && (this.OnKeyDown != null || this.OnKeyUp != null)) { mKeyData = (Keys)wParam; KeyEventArgs keyEvent = new KeyEventArgs(mKeyData); //这里简单的通过lParam的值的正负情况与按键的状态相关联 if (lParam.ToInt32() > 0 && this.OnKeyDown != null) { this.OnKeyDown(this, keyEvent); } else if (lParam.ToInt32() < 0 && this.OnKeyUp != null) { this.OnKeyUp(this, keyEvent); } } return(CallNextHookEx(this.mKetboardHook, nCode, wParam, lParam)); }
public static extern IntPtr SetWindowsHookEx(WH_CODE idHook, HookProc lpfn, IntPtr pInstance, uint threadId);
public static extern int CallNextHookEx(IntPtr pHookHandle, WH_CODE nCodem, Int32 wParam, IntPtr lParam);