Exemplo n.º 1
0
 /// <summary>
 /// Hook into the windows eventqueue for mouse events
 /// </summary>
 /// <returns></returns>
 public int SetHook()
 {
     hProc = new Win32Api.HookProc(MouseHookProc);
     hHook = Win32Api.SetWindowsHookEx(WH_MOUSE_LL, hProc, IntPtr.Zero, 0);
     return(hHook);
 }
Exemplo n.º 2
0
 /// <summary>
 /// When stopping, unhook to release resources.
 /// </summary>
 public void UnHook()
 {
     Win32Api.UnhookWindowsHookEx(hHook);
 }
Exemplo n.º 3
0
        /// <summary>
        /// This is the code hooked into the windows event queue that receives the messages
        /// </summary>
        /// <param name="nCode"></param>
        /// <param name="wParam"></param>
        /// <param name="lParam"></param>
        /// <returns></returns>
        private int MouseHookProc(int nCode, IntPtr wParam, IntPtr lParam)
        {
            Win32Api.MouseHookStruct MyMouseHookStruct = (Win32Api.MouseHookStruct)Marshal.PtrToStructure(lParam, typeof(Win32Api.MouseHookStruct));

            // Pass this message up the chain.  If false, eat the message.
            bool sendup = true;

            //Debug.WriteLine(string.Format("{0}", wParam));
            if (nCode < 0)
            {
                return(Win32Api.CallNextHookEx(hHook, nCode, wParam, lParam));
            }
            else
            {
                // send mouse events to subscribed code.
                // They tell us if we should eat it or pass it along.
                if (MouseClickEvent != null)
                {
                    MouseButtons button     = MouseButtons.None;
                    int          clickCount = 0;
                    switch ((Int32)wParam)
                    {
                    case WM_LBUTTONDOWN:
                        button     = MouseButtons.Left;
                        clickCount = 1;
                        sendup     = MouseDownEvent(this, new APIMouseEventArgs(button, clickCount, point.X, point.Y, 0, MyMouseHookStruct.dwExtraInfo));
                        break;

                    case WM_RBUTTONDOWN:
                        button     = MouseButtons.Right;
                        clickCount = 1;
                        sendup     = MouseDownEvent(this, new APIMouseEventArgs(button, clickCount, point.X, point.Y, 0, MyMouseHookStruct.dwExtraInfo));
                        break;

                    case WM_MBUTTONDOWN:
                        button     = MouseButtons.Middle;
                        clickCount = 1;
                        sendup     = MouseDownEvent(this, new APIMouseEventArgs(button, clickCount, point.X, point.Y, 0, MyMouseHookStruct.dwExtraInfo));
                        break;

                    case WM_LBUTTONUP:
                        button     = MouseButtons.Left;
                        clickCount = 1;
                        sendup     = MouseUpEvent(this, new APIMouseEventArgs(button, clickCount, point.X, point.Y, 0, MyMouseHookStruct.dwExtraInfo));
                        break;

                    case WM_RBUTTONUP:
                        button     = MouseButtons.Right;
                        clickCount = 1;
                        sendup     = MouseUpEvent(this, new APIMouseEventArgs(button, clickCount, point.X, point.Y, 0, MyMouseHookStruct.dwExtraInfo));
                        break;

                    case WM_MBUTTONUP:
                        button     = MouseButtons.Middle;
                        clickCount = 1;
                        sendup     = MouseUpEvent(this, new APIMouseEventArgs(button, clickCount, point.X, point.Y, 0, MyMouseHookStruct.dwExtraInfo));
                        break;
                    }

                    var e = new APIMouseEventArgs(button, clickCount, point.X, point.Y, 0, MyMouseHookStruct.dwExtraInfo);
                    MouseClickEvent(this, e);
                }
                if (sendup)
                {
                    this.Point       = new Point(MyMouseHookStruct.pt.x, MyMouseHookStruct.pt.y);
                    this.dwExtraInfo = MyMouseHookStruct.dwExtraInfo;
                    return(Win32Api.CallNextHookEx(hHook, nCode, wParam, lParam));
                }
                return(0);
            }
        }