예제 #1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="nCode"></param>
        /// <param name="wParam"></param>
        /// <param name="lParam"></param>
        /// <returns></returns>
        private int MouseHookProc(int nCode, int wParam, IntPtr lParam)
        {
            if (nCode >= 0)
            {
                MouseHookStruct mouseHookStruct = (MouseHookStruct)Marshal.PtrToStructure(lParam, typeof(MouseHookStruct));

                MouseButtons button     = MouseButtons.None;
                short        mouseDelta = 0;
                int          clickCount = 0;
                bool         mouseDown  = false;
                bool         mouseUp    = false;

                switch (wParam)
                {
                case (int)WindowsMessage.WM_LBUTTONDOWN:
                    mouseDown  = true;
                    button     = MouseButtons.Left;
                    clickCount = 1;
                    break;

                case (int)WindowsMessage.WM_LBUTTONUP:
                    mouseUp    = true;
                    button     = MouseButtons.Left;
                    clickCount = 1;
                    break;

                case (int)WindowsMessage.WM_LBUTTONDBLCLK:
                    button     = MouseButtons.Left;
                    clickCount = 2;
                    break;

                case (int)WindowsMessage.WM_RBUTTONDOWN:
                    mouseDown  = true;
                    button     = MouseButtons.Right;
                    clickCount = 1;
                    break;

                case (int)WindowsMessage.WM_RBUTTONUP:
                    mouseUp    = true;
                    button     = MouseButtons.Right;
                    clickCount = 1;
                    break;

                case (int)WindowsMessage.WM_RBUTTONDBLCLK:
                    button     = MouseButtons.Right;
                    clickCount = 2;
                    break;

                case (int)WindowsMessage.WM_MOUSEWHEEL:
                    mouseDelta = (short)((mouseHookStruct.MouseData >> 16) & 0xffff);
                    break;
                }

                MouseEventExtArgs e = new MouseEventExtArgs(
                    button,
                    clickCount,
                    mouseHookStruct.Point.X,
                    mouseHookStruct.Point.Y,
                    mouseDelta);

                if (this.EventMouseUp != null && mouseUp)
                {
                    this.EventMouseUp.Invoke(null, e);
                }
                if (this.EventMouseDown != null && mouseDown)
                {
                    this.EventMouseDown.Invoke(null, e);
                }
                if (this.EventMouseClick != null && clickCount > 0)
                {
                    this.EventMouseClick.Invoke(null, e);
                }
                if (this.EventMouseClickExt != null && clickCount > 0)
                {
                    this.EventMouseClickExt.Invoke(null, e);
                }
                if (this.EventMouseDoubleClick != null && clickCount == 2)
                {
                    this.EventMouseDoubleClick.Invoke(null, e);
                }
                if (this.EventMouseWheel != null && mouseDelta != 0)
                {
                    this.EventMouseWheel.Invoke(null, e);
                }
                if ((this.EventMouseMove != null || this.EventMouseMoveExt != null) &&
                    (this.Old_X != mouseHookStruct.Point.X || this.Old_Y != mouseHookStruct.Point.Y))
                {
                    this.Old_X = mouseHookStruct.Point.X;
                    this.Old_Y = mouseHookStruct.Point.Y;
                    if (EventMouseMove != null)
                    {
                        this.EventMouseMove.Invoke(null, e);
                    }
                    if (EventMouseMoveExt != null)
                    {
                        this.EventMouseMoveExt.Invoke(null, e);
                    }
                }
                if (e.Handled)
                {
                    return(-1);
                }
            }
            return(NativeMethods.CallNextHookEx(this.MouseHookHandle, nCode, wParam, lParam));
        }
예제 #2
0
        /// <summary>
        /// 
        /// </summary>
        /// <param name="nCode"></param>
        /// <param name="wParam"></param>
        /// <param name="lParam"></param>
        /// <returns></returns>
        private int MouseHookProc(int nCode, int wParam, IntPtr lParam)
        {
            if (nCode >= 0)
            {
                MouseHookStruct mouseHookStruct = (MouseHookStruct)Marshal.PtrToStructure(lParam, typeof(MouseHookStruct));

                MouseButtons button = MouseButtons.None;
                short mouseDelta = 0;
                int clickCount = 0;
                bool mouseDown = false;
                bool mouseUp = false;

                switch (wParam)
                {
                    case (int)WindowsMessage.WM_LBUTTONDOWN:
                        mouseDown = true;
                        button = MouseButtons.Left;
                        clickCount = 1;
                        break;
                    case (int)WindowsMessage.WM_LBUTTONUP:
                        mouseUp = true;
                        button = MouseButtons.Left;
                        clickCount = 1;
                        break;
                    case (int)WindowsMessage.WM_LBUTTONDBLCLK:
                        button = MouseButtons.Left;
                        clickCount = 2;
                        break;
                    case (int)WindowsMessage.WM_RBUTTONDOWN:
                        mouseDown = true;
                        button = MouseButtons.Right;
                        clickCount = 1;
                        break;
                    case (int)WindowsMessage.WM_RBUTTONUP:
                        mouseUp = true;
                        button = MouseButtons.Right;
                        clickCount = 1;
                        break;
                    case (int)WindowsMessage.WM_RBUTTONDBLCLK:
                        button = MouseButtons.Right;
                        clickCount = 2;
                        break;
                    case (int)WindowsMessage.WM_MOUSEWHEEL:
                        mouseDelta = (short)((mouseHookStruct.MouseData >> 16) & 0xffff);
                        break;
                }

                MouseEventExtArgs e = new MouseEventExtArgs(
                    button,
                    clickCount,
                    mouseHookStruct.Point.X,
                    mouseHookStruct.Point.Y,
                    mouseDelta);

                if (this.EventMouseUp != null && mouseUp)
                    this.EventMouseUp.Invoke(null, e);
                if (this.EventMouseDown != null && mouseDown)
                    this.EventMouseDown.Invoke(null, e);
                if (this.EventMouseClick != null && clickCount > 0)
                    this.EventMouseClick.Invoke(null, e);
                if (this.EventMouseClickExt != null && clickCount > 0)
                    this.EventMouseClickExt.Invoke(null, e);
                if (this.EventMouseDoubleClick != null && clickCount == 2)
                    this.EventMouseDoubleClick.Invoke(null, e);
                if (this.EventMouseWheel != null && mouseDelta != 0)
                    this.EventMouseWheel.Invoke(null, e);
                if ((this.EventMouseMove != null || this.EventMouseMoveExt != null) &&
                    (this.Old_X != mouseHookStruct.Point.X || this.Old_Y != mouseHookStruct.Point.Y))
                {
                    this.Old_X = mouseHookStruct.Point.X;
                    this.Old_Y = mouseHookStruct.Point.Y;
                    if (EventMouseMove != null)
                        this.EventMouseMove.Invoke(null, e);
                    if (EventMouseMoveExt != null)
                        this.EventMouseMoveExt.Invoke(null, e);
                }
                if (e.Handled)
                    return -1;
            }
            return NativeMethods.CallNextHookEx(this.MouseHookHandle, nCode, wParam, lParam);
        }