微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

击中断点时鼠标冻结/滞后

如何解决击中断点时鼠标冻结/滞后

目标:能够在Windows桌面应用程序上找到被单击元素的点(X,Y),而无需执行单击本身。

无效的解决方案 我已经在我的.net核心WPF应用程序中添加mousekeyhook Nuget程序包,它工作正常(当单击并以正确的位置引发事件时),但是每次程序达到断点时(对于下面的特定示例-在M_Events_MouseDown方法中)鼠标开始滞后约20秒。

我还发现在WinForms应用程序中它运行正常

mousekeyhook实现:

    public partial class MainWindow : Window
    {
        private IKeyboardMouseEvents m_Events;
        public MainWindow()
        {
            InitializeComponent();
            SubscribeGlobal();
        }

        private void SubscribeGlobal()
        {
            Unsubscribe();
            Subscribe(Hook.GlobalEvents());
        }

        private void Subscribe(IKeyboardMouseEvents events)
        {
            m_Events = events;
            m_Events.MouseDown += M_Events_MouseDown; 
        }

        private void M_Events_MouseDown(object sender,System.Windows.Forms.MouseEventArgs e)
        {
            Console.WriteLine($"Mouse down :{e}");
        }

        private void Unsubscribe()
        {
            if (m_Events == null)
                return;

            m_Events.MouseDown -= M_Events_MouseDown;
        }
    }

解决方法

这是一个已知问题,是设计导致的低级挂钩行为。

当您进入鼠标事件处理链时,您的代码就是许多其他处理器之一。每个钩住的代码段都有可能抑制或修改进一步的处理。但是,这样做有时间限制。如果设置了断点,则Windows将调用您的代码,您的代码将不响应,将发生超时并重新开始。

有关详情,请参见类似问题。第二个答案越多越好。:Low level mouse hook - mouse freeze on breakpoint

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。