예제 #1
0
 public int MouseHookProc(int nCode, IntPtr wParam, IntPtr lParam)
 {
     Win32Api.MouseHookStruct MyMouseHookStruct = (Win32Api.MouseHookStruct)Marshal.PtrToStructure(lParam, typeof(Win32Api.MouseHookStruct));
     if (nCode >= 0)
     {
         this.mouseX = MyMouseHookStruct.pt.x;
         this.mouseY = MyMouseHookStruct.pt.y;
     }
     return(Win32Api.CallNextHookEx(hHook, nCode, wParam, lParam));
 }
예제 #2
0
        private int MouseHookProc(int nCode, IntPtr wParam, IntPtr lParam)
        {
            Win32Api.MouseHookStruct MyMouseHookStruct = (Win32Api.MouseHookStruct)Marshal.PtrToStructure(lParam, typeof(Win32Api.MouseHookStruct));
            if (nCode < 0)
            {
                return(Win32Api.CallNextHookEx(hHook, nCode, wParam, lParam));
            }
            else
            {
                MouseButtons button     = MouseButtons.None;
                int          clickCount = 0;
                switch ((Int32)wParam)
                {
                case WM_LBUTTONDOWN:
                    button     = MouseButtons.Left;
                    clickCount = 1;
                    MouseDownEvent?.Invoke(this, new MouseEventArgs(button, clickCount, point.X, point.Y, 0));
                    break;

                //case WM_RBUTTONDOWN:
                //    button = MouseButtons.Right;
                //    clickCount = 1;
                //    MouseDownEvent?.Invoke(this, new MouseEventArgs(button, clickCount, point.X, point.Y, 0));
                //    break;
                //case WM_MBUTTONDOWN:
                //    button = MouseButtons.Middle;
                //    clickCount = 1;
                //    MouseDownEvent?.Invoke(this, new MouseEventArgs(button, clickCount, point.X, point.Y, 0));
                //    break;
                //case WM_LBUTTONUP:
                //    button = MouseButtons.Left;
                //    clickCount = 1;
                //    MouseUpEvent?.Invoke(this, new MouseEventArgs(button, clickCount, point.X, point.Y, 0));
                //    break;
                //case WM_RBUTTONUP:
                //    button = MouseButtons.Right;
                //    clickCount = 1;
                //    MouseUpEvent?.Invoke(this, new MouseEventArgs(button, clickCount, point.X, point.Y, 0));
                //    break;
                //case WM_MBUTTONUP:
                //    button = MouseButtons.Middle;
                //    clickCount = 1;
                //    MouseUpEvent?.Invoke(this, new MouseEventArgs(button, clickCount, point.X, point.Y, 0));
                //    break;
                default:
                    break;
                }

                //var e = new MouseEventArgs(button, clickCount, point.X, point.Y, 0);
                //MouseClickEvent(this, e);

                this.Point = new Point(MyMouseHookStruct.pt.x, MyMouseHookStruct.pt.y);
                return(Win32Api.CallNextHookEx(hHook, nCode, wParam, lParam));
            }
        }
예제 #3
0
        /// <summary>
        /// 消息处理中心
        /// </summary>
        /// <param name="nCode"></param>
        /// <param name="wParam"></param>
        /// <param name="lParam"></param>
        /// <returns></returns>
        private int HOOKProcReturn(int nCode, IntPtr wParam, IntPtr lParam)
        {
            if (nCode >= 0)
            {
                //鼠标右键
                if (wParam.ToInt32() == 0xa1)
                {
                    Win32Api.MouseHookStruct MyMouseHookStruct = (Win32Api.MouseHookStruct)Marshal.PtrToStructure(lParam, typeof(Win32Api.MouseHookStruct));
                    MouseButtons             button            = MouseButtons.Left;

                    Point point = new Point(MyMouseHookStruct.pt.x, MyMouseHookStruct.pt.y);

                    var e = new MouseEventArgs(button, 1, point.X, point.Y, 0);

                    if (null != MouseClickEvent)
                    {
                        MouseClickEvent(this, e);
                    }
                }
            }
            //监听下一次事件
            return(CallNextHookEx(m_Hook, nCode, wParam, lParam));
        }