コード例 #1
0
        private long Listener(
            HookCode nCode,
            WindowsMessage wParam,
            MsLlHookStruct lParam)
        {
            if (this.actions.TryGetValue(wParam, out var action))
            {
                this.sync.Post(state => action(), null);
            }

            return(User32.CallNextHookEx(
                       nCode: nCode,
                       wParam: wParam,
                       lParam: lParam));
        }
コード例 #2
0
        //build mouse command
        private static void BuildMouseCommand(IntPtr lParam, MouseMessages mouseMessage)
        {
            MsLlHookStruct hookStruct = (MsLlHookStruct)Marshal.PtrToStructure(lParam, typeof(MsLlHookStruct));

            string mouseEventClickType;

            switch (mouseMessage)
            {
            case MouseMessages.WmLButtonDown:
                mouseEventClickType = "Left Down";
                break;

            case MouseMessages.WmLButtonUp:
                mouseEventClickType = "Left Up";
                break;

            case MouseMessages.WmMButtonDown:
                mouseEventClickType = "Middle Down";
                break;

            case MouseMessages.WmMButtonUp:
                mouseEventClickType = "Middle Up";
                break;

            case MouseMessages.WmMouseMove:
                mouseEventClickType = "None";

                if (_lastMouseMove.ElapsedMilliseconds >= _msResolution)
                {
                    _lastMouseMove.Restart();
                }
                else
                {
                    return;
                }
                break;

            case MouseMessages.WmRButtonDown:
                mouseEventClickType = "Right Down";
                break;

            case MouseMessages.WmRButtonUp:
                mouseEventClickType = "Right Up";
                break;

            default:
                return;
            }

            //return if we do not want to capture mouse moves
            if ((!_performMouseMoveCapture) && (mouseEventClickType == "None"))
            {
                return;
            }

            //return if we do not want to capture mouse clicks
            if ((!_performMouseClickCapture) && (mouseEventClickType != "None"))
            {
                return;
            }

            if ((GeneratedCommands.Count > 1) && (GeneratedCommands[GeneratedCommands.Count - 1] is SendMouseMoveCommand) &&
                mouseEventClickType != "None" && _stopWatch.ElapsedMilliseconds <= 500 &&
                hookStruct.Pt.X == _lastClickHookStruct.Pt.X && hookStruct.Pt.Y == _lastClickHookStruct.Pt.Y)
            {
                var lastCreatedMouseCommand = (SendMouseMoveCommand)GeneratedCommands[GeneratedCommands.Count - 1];

                switch ((GeneratedCommands[GeneratedCommands.Count - 1] as SendMouseMoveCommand).v_MouseClick)
                {
                case "Left Down":
                    if (mouseEventClickType == "Left Up")
                    {
                        lastCreatedMouseCommand.v_MouseClick = "Left Click";
                    }
                    break;

                case "Middle Down":
                    if (mouseEventClickType == "Middle Up")
                    {
                        lastCreatedMouseCommand.v_MouseClick = "Middle Click";
                    }
                    break;

                case "Right Down":
                    if (mouseEventClickType == "Right Up")
                    {
                        lastCreatedMouseCommand.v_MouseClick = "Right Click";
                    }
                    break;

                case "Left Click":
                    if (mouseEventClickType == "Left Down")
                    {
                        lastCreatedMouseCommand.v_MouseClick = "Left Double Click";
                    }
                    break;

                default:
                    break;
                }
            }
            else
            {
                //build a pause command to track pause since last command
                BuildPauseCommand();

                //define new mouse command
                var mouseMove = new SendMouseMoveCommand
                {
                    v_XMousePosition = hookStruct.Pt.X.ToString(),
                    v_YMousePosition = hookStruct.Pt.Y.ToString(),
                    v_MouseClick     = mouseEventClickType
                };

                if (mouseEventClickType != "None")
                {
                    IntPtr winHandle = WindowFromPoint(hookStruct.Pt);
                    _ = GetWindowText(winHandle, _buffer, _buffer.Capacity);
                    var windowName = _buffer.ToString();

                    mouseMove.v_Comment = "Clicked On Window: " + windowName;
                }

                GeneratedCommands.Add(mouseMove);
            }

            _lastClickHookStruct = hookStruct;
        }
コード例 #3
0
        //build mouse command
        private static void BuildMouseCommand(IntPtr lParam, _mouseMessages mouseMessage)
        {
            string mouseEventClickType = string.Empty;

            switch (mouseMessage)
            {
            case _mouseMessages.WmLButtonDown:
                mouseEventClickType = "Left Down";
                break;

            case _mouseMessages.WmLButtonUp:
                mouseEventClickType = "Left Up";
                break;

            case _mouseMessages.WmMouseMove:
                mouseEventClickType = "None";

                if (_lastMouseMove.ElapsedMilliseconds >= _msResolution)
                {
                    _lastMouseMove.Restart();
                }
                else
                {
                    return;
                }
                break;

            case _mouseMessages.WmRButtonDown:
                mouseEventClickType = "Right Down";
                break;

            case _mouseMessages.WmRButtonUp:
                mouseEventClickType = "Right Up";
                break;

            default:
                return;
            }

            ////return if non matching event
            //if (mouseEventClickType == string.Empty)
            //    return;


            //return if we do not want to capture mouse moves
            if ((!_performMouseMoveCapture) && (mouseEventClickType == "None"))
            {
                return;
            }

            //return if we do not want to capture mouse clicks
            if ((!_performMouseClickCapture) && (mouseEventClickType != "None"))
            {
                return;
            }

            //build a pause command to track pause since last command
            BuildPauseCommand();

            //define new mouse command
            MsLlHookStruct hookStruct = (MsLlHookStruct)Marshal.PtrToStructure(lParam, typeof(MsLlHookStruct));

            var mouseMove = new SendMouseMoveCommand
            {
                v_XMousePosition = hookStruct.Pt.X.ToString(),
                v_YMousePosition = hookStruct.Pt.Y.ToString(),
                v_MouseClick     = mouseEventClickType
            };

            if (mouseEventClickType != "None")
            {
                IntPtr winHandle = WindowFromPoint(hookStruct.Pt);

                int length     = GetWindowText(winHandle, _buffer, _buffer.Capacity);
                var windowName = _buffer.ToString();

                mouseMove.v_Comment = "Clicked On Window: " + windowName;
            }

            GeneratedCommands.Add(mouseMove);
        }