コード例 #1
0
ファイル: EventMouse.cs プロジェクト: htadwilliams/Glue
 public EventMouse(MouseButtons mouseButton, ButtonStates buttonState, WheelMoves wheelMove, int x, int y) : base()
 {
     MouseButton = mouseButton;
     ButtonState = buttonState;
     WheelMove   = wheelMove;
     X           = x;
     Y           = y;
 }
コード例 #2
0
 public TriggerMouseWheel(
     WheelMoves wheelMove,
     string macroName,
     bool eatInput
     ) : base(macroName, eatInput)
 {
     this.Type      = TriggerType.MouseWheel;
     this.wheelMove = wheelMove;
 }
コード例 #3
0
        public static IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam)
        {
            if (nCode >= 0)
            {
                MouseMessages  mouseMessage = (MouseMessages)wParam;
                MSLLHOOKSTRUCT hookStruct   = (MSLLHOOKSTRUCT)Marshal.PtrToStructure(lParam, typeof(MSLLHOOKSTRUCT));

                // Translate mouse button into key code and action (press / release)
                VirtualKeyCode keyCode;
                MouseButtons   mouseButton;
                ButtonStates   buttonState = ButtonStates.Press;
                WheelMoves     wheelMove   = WheelMoves.None;

                // Switch could be refactored into a lookup table to make this cleaner
                // Translate mouse messages into something Glue can use
                switch (mouseMessage)
                {
                case MouseMessages.WM_LBUTTONDBLCLK:
                case MouseMessages.WM_LBUTTONDOWN:
                    keyCode     = VirtualKeyCode.LBUTTON;
                    mouseButton = MouseButtons.Left;

                    LOGGER.Info(String.Format("Click at ({0}, {1})", hookStruct.pt.x, hookStruct.pt.y));
                    break;

                case MouseMessages.WM_LBUTTONUP:
                    keyCode     = VirtualKeyCode.LBUTTON;
                    mouseButton = MouseButtons.Left;
                    buttonState = ButtonStates.Release;
                    break;

                case MouseMessages.WM_RBUTTONDOWN:
                case MouseMessages.WM_RBUTTONDBLCLK:
                    keyCode     = VirtualKeyCode.RBUTTON;
                    mouseButton = MouseButtons.Right;
                    break;

                case MouseMessages.WM_RBUTTONUP:
                    keyCode     = VirtualKeyCode.RBUTTON;
                    mouseButton = MouseButtons.Right;
                    buttonState = ButtonStates.Release;
                    break;

                case MouseMessages.WM_MBUTTONDOWN:
                case MouseMessages.WM_MBUTTONDBLCLK:
                    keyCode     = VirtualKeyCode.MBUTTON;
                    mouseButton = MouseButtons.Middle;
                    buttonState = ButtonStates.Press;
                    break;

                case MouseMessages.WM_MBUTTONUP:
                    keyCode     = VirtualKeyCode.MBUTTON;
                    mouseButton = MouseButtons.Middle;
                    buttonState = ButtonStates.Release;
                    break;

                case MouseMessages.WM_XBUTTONDOWN:
                case MouseMessages.WM_XBUTTONDBLCLK:
                    keyCode     = GetXButtonKeyCode(hookStruct);
                    mouseButton = GetXButtonMouse(hookStruct);
                    break;

                case MouseMessages.WM_XBUTTONUP:
                    keyCode     = GetXButtonKeyCode(hookStruct);
                    mouseButton = GetXButtonMouse(hookStruct);
                    buttonState = ButtonStates.Release;
                    break;

                case MouseMessages.WM_MOUSEWHEEL:
                    if (unchecked ((short)((long)hookStruct.mouseData >> 16)) > 0)
                    {
                        wheelMove = WheelMoves.Up;
                    }
                    else
                    {
                        wheelMove = WheelMoves.Down;
                    }
                    keyCode     = 0;
                    mouseButton = MouseButtons.None;
                    break;

                case MouseMessages.WM_MOUSEMOVE:
                default:
                    keyCode     = 0;
                    mouseButton = MouseButtons.None;
                    buttonState = ButtonStates.Release;
                    break;
                }

                // Mouse buttons are handled like keyboard keys
                if (mouseMessage != MouseMessages.WM_MOUSEMOVE)
                {
                    if (KeyboardHandler.BroadcastKeyboardEvent((int)keyCode, buttonState))
                    {
                        // Eat mouse message if any event listener says to do so
                        return(new IntPtr(1));
                    }
                }

                // All mouse events go on the mouse bus
                if (BroadcastMouseEvent(new EventMouse(mouseButton, buttonState, wheelMove, hookStruct.pt.x, hookStruct.pt.y)))
                {
                    return(new IntPtr(1));
                }
            }

            // Freeze the mouse if mouse safety is toggled (and not using filter driver)
            if (!Tube.InterceptorDriverInput.IsLoaded &&
                Tube.MouseLocked)
            {
                return(new IntPtr(1));
            }

            return(new IntPtr(0));
        }