Esempio n. 1
0
        private static int KeyboardHookProc(int nCode, Int32 wParam, IntPtr lParam)
        {
            bool handled = false;

            if (nCode >= 0)
            {
                KeyboardHookStruct keyboardHookStruct = (KeyboardHookStruct)Marshal.PtrToStructure(lParam, typeof(KeyboardHookStruct));

                if (keyDownHandler != null && (wParam == Win.WM_KEYDOWN || wParam == Win.WM_SYSKEYDOWN))
                {
                    TriggerKeyDownEvent(keyboardHookStruct, ref handled);
                }

                if (keyUpHandler != null && (wParam == Win.WM_KEYUP || wParam == Win.WM_SYSKEYUP))
                {
                    TriggerKeyUpEvent(keyboardHookStruct, ref handled);
                }
            }

            if (handled)
            {
                return(-1);
            }
            else
            {
                return(Win.CallNextHookEx(keyboardHookHandle, nCode, wParam, lParam));
            }
        }
Esempio n. 2
0
        private static int MouseHookProc(int nCode, int wParam, IntPtr lParam)
        {
            if (nCode >= 0)
            {
                MouseLLHookStruct mouseHookStruct = (MouseLLHookStruct)Marshal.PtrToStructure(lParam, typeof(MouseLLHookStruct));

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

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

                case Win.WM_LBUTTONUP:
                    mouseUp    = true;
                    button     = MouseButtons.Left;
                    clickCount = 1;
                    break;

                case Win.WM_RBUTTONDOWN:
                    mouseDown  = true;
                    button     = MouseButtons.Right;
                    clickCount = 1;
                    break;

                case Win.WM_MBUTTONDOWN:
                    mouseDown  = true;
                    button     = MouseButtons.Middle;
                    clickCount = 1;
                    break;

                case Win.WM_MBUTTONUP:
                    mouseUp    = true;
                    button     = MouseButtons.Middle;
                    clickCount = 1;
                    break;

                case Win.WM_RBUTTONUP:
                    mouseUp    = true;
                    button     = MouseButtons.Right;
                    clickCount = 1;
                    break;

                case Win.WM_MOUSEWHEEL:
                    // High-order word of MouseData is the wheel delta.
                    mouseDelta = (short)((mouseHookStruct.MouseData >> 16) & 0xffff);
                    break;

                    // TODO: Handle WM_XBUTTONDOWN, WM_XBUTTONUP, WM_XBUTTONDBLCLK, WM_NCXBUTTONDOWN, WM_NCXBUTTONUP, & WM_NCXBUTTONDBLCLK.
                }

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

                if (mouseUpHandler != null && mouseUp)
                {
                    mouseUpHandler.Invoke(null, e);
                }

                if (mouseDownHandler != null && mouseDown)
                {
                    mouseDownHandler.Invoke(null, e);
                }

                if (mouseWheelHandler != null && mouseDelta != 0)
                {
                    mouseWheelHandler.Invoke(null, e);
                }

                if (mouseMoveHandler != null && !previousMousePos.Equals(mousePos))
                {
                    previousMousePos = mousePos;
                    if (mouseMoveHandler != null)
                    {
                        mouseMoveHandler.Invoke(null, e);
                    }
                }
            }

            return(Win.CallNextHookEx(mouseHookHandle, nCode, wParam, lParam));
        }