Example #1
0
        private static IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam)
        {
            if (nCode >= 0)
            {
                MSLLHOOKSTRUCT hookStruct = (MSLLHOOKSTRUCT)Marshal.PtrToStructure(lParam, typeof(MSLLHOOKSTRUCT));

                MouseHookEventType type = MouseHookEventType.LButtonDown;
                switch ((MouseMessages)wParam)
                {
                case MouseMessages.WM_LBUTTONDOWN:
                    type = MouseHookEventType.LButtonDown;
                    break;

                case MouseMessages.WM_LBUTTONUP:
                    type = MouseHookEventType.LButtonUp;
                    break;

                case MouseMessages.WM_RBUTTONDOWN:
                    type = MouseHookEventType.RButtonDown;
                    break;

                case MouseMessages.WM_RBUTTONUP:
                    type = MouseHookEventType.RButtonUp;
                    break;

                case MouseMessages.WM_MOUSEWHEEL:
                    type = MouseHookEventType.MouseWheel;
                    break;

                case MouseMessages.WM_MOUSEMOVE:
                    type = MouseHookEventType.MouseMove;
                    break;
                }

                if (MouseEvent != null)
                {
                    MouseEvent(null, new MouseHookEventArgs()
                    {
                        Type = type,
                        X    = hookStruct.pt.x,
                        Y    = hookStruct.pt.y
                    });
                }
            }

            return(CallNextHookEx(_hookID, nCode, wParam, lParam));
        }
Example #2
0
        /// <summary>
        /// Constructs a new MouseHookEvent
        /// </summary>
        /// <param name="wParam">The <c>wParam</c> (Message code) for the
        /// Mouse Hook event</param>
        /// <param name="mhs">The <c>MOUSEHOOKEVENT</c> structure
        /// for the hook event.</param>
        public MouseHookEventArgs(
            IntPtr wParam,
            MOUSEHOOKSTRUCT mhs
            )
        {
            switch ((int)wParam)
            {
            case WM_MOUSEMOVE:
                eventType = MouseHookEventType.MouseMove;
                // we could check if we're over a non-client
                // area here etc
                button = MouseButtons.None;
                break;

            case WM_LBUTTONDOWN:
                eventType     = MouseHookEventType.MouseDown;
                button        = MouseButtons.Left;
                eventLocation = MouseHookEventLocation.Client;
                break;

            case WM_LBUTTONUP:
                eventType     = MouseHookEventType.MouseUp;
                button        = MouseButtons.Left;
                eventLocation = MouseHookEventLocation.Client;
                break;

            case WM_LBUTTONDBLCLK:
                eventType     = MouseHookEventType.DblClick;
                button        = MouseButtons.Left;
                eventLocation = MouseHookEventLocation.Client;
                break;

            case WM_MBUTTONDOWN:
                eventType     = MouseHookEventType.MouseDown;
                button        = MouseButtons.Middle;
                eventLocation = MouseHookEventLocation.Client;
                break;

            case WM_MBUTTONUP:
                eventType     = MouseHookEventType.MouseUp;
                button        = MouseButtons.Middle;
                eventLocation = MouseHookEventLocation.Client;
                break;

            case WM_MBUTTONDBLCLK:
                eventType     = MouseHookEventType.DblClick;
                button        = MouseButtons.Middle;
                eventLocation = MouseHookEventLocation.Client;
                break;

            case WM_RBUTTONDOWN:
                eventType     = MouseHookEventType.MouseDown;
                button        = MouseButtons.Right;
                eventLocation = MouseHookEventLocation.Client;
                break;

            case WM_RBUTTONUP:
                eventType     = MouseHookEventType.MouseUp;
                button        = MouseButtons.Right;
                eventLocation = MouseHookEventLocation.Client;
                break;

            case WM_RBUTTONDBLCLK:
                eventType     = MouseHookEventType.DblClick;
                button        = MouseButtons.Right;
                eventLocation = MouseHookEventLocation.Client;
                break;

            case WM_NCLBUTTONDOWN:
                eventType     = MouseHookEventType.MouseDown;
                button        = MouseButtons.Left;
                eventLocation = MouseHookEventLocation.NonClient;
                break;

            case WM_NCLBUTTONUP:
                eventType     = MouseHookEventType.MouseUp;
                button        = MouseButtons.Left;
                eventLocation = MouseHookEventLocation.NonClient;
                break;

            case WM_NCLBUTTONDBLCLK:
                eventType     = MouseHookEventType.DblClick;
                button        = MouseButtons.Left;
                eventLocation = MouseHookEventLocation.NonClient;
                break;

            case WM_NCMBUTTONDOWN:
                eventType     = MouseHookEventType.MouseDown;
                button        = MouseButtons.Middle;
                eventLocation = MouseHookEventLocation.NonClient;
                break;

            case WM_NCMBUTTONUP:
                eventType     = MouseHookEventType.MouseUp;
                button        = MouseButtons.Middle;
                eventLocation = MouseHookEventLocation.NonClient;
                break;

            case WM_NCMBUTTONDBLCLK:
                eventType     = MouseHookEventType.DblClick;
                button        = MouseButtons.Middle;
                eventLocation = MouseHookEventLocation.NonClient;
                break;

            case WM_NCRBUTTONDOWN:
                eventType     = MouseHookEventType.MouseDown;
                button        = MouseButtons.Right;
                eventLocation = MouseHookEventLocation.NonClient;
                break;

            case WM_NCRBUTTONUP:
                eventType     = MouseHookEventType.MouseUp;
                button        = MouseButtons.Right;
                eventLocation = MouseHookEventLocation.NonClient;
                break;

            case WM_NCRBUTTONDBLCLK:
                eventType     = MouseHookEventType.DblClick;
                button        = MouseButtons.Right;
                eventLocation = MouseHookEventLocation.NonClient;
                break;
            }

            x = mhs.x;
            y = mhs.y;

            handle = mhs.handle;

            hitTestCode = mhs.wHitTestCode;
            extraData   = mhs.dwExtraInfo;
        }