Exemplo n.º 1
0
        /// <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));
        }
Exemplo n.º 2
0
 /// <summary>
 /// 钩子类
 /// </summary>
 /// <remarks>本类仅仅简单实现了 WH_KEYBOARD_LL 以及 WH_MOUSE_LL </remarks>
 public SKHook()
 {
     Win32API.GetKeyboardState(this.m_KeyState);
 }