WPF 使用 mousekeyhook 库计算点击次数 - LoaderLock 错误

Posted

技术标签:

【中文标题】WPF 使用 mousekeyhook 库计算点击次数 - LoaderLock 错误【英文标题】:WPF using mousekeyhook library to count clicks - LoaderLock error 【发布时间】:2015-07-12 10:55:12 【问题描述】:

我想编写一个计算窗口中鼠标点击次数的应用程序。经过一番研究,我发现了这个库:MouseKeyHook 我已经创建了 wpf 应用程序并复制了示例代码:

public partial class MainWindow : Window

    private IKeyboardMouseEvents m_GlobalHook;

    public MainWindow()
    
        InitializeComponent();
        Subscribe();
    

    public void Subscribe()
    
        // Note: for the application hook, use the Hook.AppEvents() instead
        m_GlobalHook = Hook.GlobalEvents();

        m_GlobalHook.MouseDownExt += GlobalHookMouseDownExt;
        m_GlobalHook.KeyPress += GlobalHookKeyPress;
    

    private void GlobalHookKeyPress(object sender, KeyPressEventArgs e)
    
        Console.WriteLine("KeyPress: \t0", e.KeyChar);
    

    private void GlobalHookMouseDownExt(object sender, MouseEventExtArgs e)
    
        Console.WriteLine("MouseDown: \t0; \t System Timestamp: \t1", e.Button, e.Timestamp);

        // uncommenting the following line will suppress the middle mouse button click
        // if (e.Buttons == MouseButtons.Middle)  e.Handled = true; 
    

    public void Unsubscribe()
    
        m_GlobalHook.MouseDownExt -= GlobalHookMouseDownExt;
        m_GlobalHook.KeyPress -= GlobalHookKeyPress;

        //It is recommened to dispose it
        m_GlobalHook.Dispose();
    

没有错误或警告,应用程序检测到点击和键入的键。但点击几下后,我收到错误消息:

有时在单击几下后会显示此错误,有时在单击 100 次后会显示此错误(MouseDown 事件 - 鼠标左键)。此外,当错误发生时,我的光标会显着减慢几秒钟。

【问题讨论】:

请点击页面底部的View Details链接显示有关错误的更多详细信息,然后将内部异常中的错误消息粘贴到此处。 这个MDA有误报的本领,好久没看到了。使用 Debug > Exceptions > Managed Debugging Assistants > LoaderLock 并取消选中 Throw 复选框。看看接下来是什么击中了风扇,如果有的话。真正的问题可能与您的反恶意软件保护有关,他们通常不太喜欢键盘记录器。 @HansPassant 您的解决方案有效。我已将此 LoaderLock 异常更改为不抛出,现在我的应用程序可以正常工作。谢谢! 【参考方案1】:

尝试在与主线程不同的线程中创建该 Hook 对象。在 DllMain 中运行并阻塞 GUI 的代码通常会出现此问题。

【讨论】:

以上是关于WPF 使用 mousekeyhook 库计算点击次数 - LoaderLock 错误的主要内容,如果未能解决你的问题,请参考以下文章

MouseKeyHook 应用程序在启动时滞后并且无法关闭

WPF 在绑定表达式添加计算

等效于使用 c# wpf 的 IsDisposed [重复]

MouseKeyHook 'CallbackOnCollectedDelegate' 问题

C# MouseKeyHook:某些键 + 修饰符组合不起作用

通过 mousekeyhook C# 检测按键的绝对最小代码