2

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

不工作的解决方案我已将mousekeyhook Nuget 包添加到我的 .net 核心 WPF 应用程序中,它工作正常(当单击和事件引发正确位置时),但每次该程序命中断点(对于下面的特定示例 - 在 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;
        }
    }
4

1 回答 1

0

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

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

有关详细信息,请参阅类似的问题。更多赞成票的第二个答案是更好的一个。:低级鼠标钩子 - 断点上的鼠标冻结

于 2020-09-03T17:06:57.833 回答