multithreading - 低级键盘 Hook 不在 UI 线程

标签 multithreading keyboard hook keyboard-hook setwindowshookex

我想为键盘钩子(Hook)创建一个好的库。我使用了 SetWindowsHookEx 方法,我注意到如果我的应用程序的主线程很忙,则不会执行应该在任何系统 KeyDown 事件中调用的方法 hookProc。我认为钩子(Hook)应该这样制作,另一个线程将对此负责。那可能吗?我该怎么做?

最佳答案

LowLevelKeyboardProc 的 Microsoft 帮助页面提到

If the hook procedure times out, the system passes the message to the next hook. However, on Windows 7 and later, the hook is silently removed without being called. There is no way for the application to know whether the hook is removed.



我怀疑这就是发生在你身上的事情。您的 HookProc 函数应该非常快:我所做的只是将关键事件推送到 std::vector 中。真正的代码在另一个线程中执行。

关于multithreading - 低级键盘 Hook 不在 UI 线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10054839/

相关文章:

java - 更改 Java 中的键盘输入语言

keyboard - 如何检查 "Allow Full Access"在 iOS 8 中是否启用?

c# - 关于多线程的问题

java - 多线程编程以及OS、CPU的支持?

java - 不同对象锁上的多线程

php - Laravel 5 中的钩子(Hook)?

c# - 在 .Net 中 Hook

具有多线程的Android sqlite

适用于 LG G4 的带数字和小数点的 Android 键盘

javascript - 未处理的 Promise sequelize hooks 和加密密码