/// <summary> /// 鼠标钩子处理函数 /// </summary> /// <param name="nCode"></param> /// <param name="wParam"></param> /// <param name="lParam"></param> /// <returns></returns> private int MouseHookProc(int nCode, Int32 wParam, IntPtr lParam) { //鼠标移动事件 if ((nCode >= 0) && (this.OnMouseUpdate != null) && (wParam == (int)WM_MOUSE.WM_MOUSEMOVE || wParam == (int)WM_MOUSE.WM_MOUSEWHEEL)) { MouseHookStruct MouseInfo = (MouseHookStruct)Marshal.PtrToStructure(lParam, typeof(MouseHookStruct)); this.OnMouseUpdate(MouseInfo.Point.X, MouseInfo.Point.Y); } //鼠标点击事件 if ((nCode >= 0) && (this.OnMouseActivity != null) && (wParam == (int)WM_MOUSE.WM_RBUTTONDOWN || wParam == (int)WM_MOUSE.WM_MBUTTONDOWN || wParam == (int)WM_MOUSE.WM_LBUTTONDOWN)) { MouseButtons button = MouseButtons.None; int clickCount = 0; switch (wParam) { case (int)WM_MOUSE.WM_MBUTTONDOWN: button = MouseButtons.Middle; clickCount = 1; break; case (int)WM_MOUSE.WM_MBUTTONUP: button = MouseButtons.Middle; clickCount = 0; break; } MouseHookStruct MouseInfo = (MouseHookStruct)Marshal.PtrToStructure(lParam, typeof(MouseHookStruct)); MouseEventArgs mouseEvent = new MouseEventArgs(button, clickCount, MouseInfo.Point.X, MouseInfo.Point.Y, 0); this.OnMouseActivity(this, mouseEvent); } ////如果正常运行并且用户要监听鼠标的消息 //if ((nCode >= 0) && (OnMouseActivity != null)) //{ // MouseButtons button = MouseButtons.None; // int clickCount = 0; // // switch (wParam) // { // case WM_MOUSE.WM_MBUTTONDOWN: // button = MouseButtons.Middle; // clickCount = 1; // break; // case WM_MOUSE.WM_MBUTTONUP: // button = MouseButtons.Middle; // clickCount = 0; // break; // } // // //从回调函数中得到鼠标的信息 // MouseHookStruct MyMouseHookStruct = (MouseHookStruct)Marshal.PtrToStructure(lParam, typeof(MouseHookStruct)); // MouseEventArgs e = new MouseEventArgs(button, clickCount, MyMouseHookStruct.pt.x, MyMouseHookStruct.pt.y, 0); // //if(e.X>700)return 1;//如果想要限制鼠标在屏幕中的移动区域可以在此处设置 // OnMouseActivity(this, e); //} return(Win32API.CallNextHookEx(this.m_pMouseHook, nCode, wParam, lParam)); }
/// <summary> /// 钩子类 /// </summary> /// <remarks>本类仅仅简单实现了 WH_KEYBOARD_LL 以及 WH_MOUSE_LL </remarks> public SKHook() { Win32API.GetKeyboardState(this.m_KeyState); }