是否可以连续挂钩和取下键盘?

时间:2012-06-25 11:12:48

标签: vb.net

我在vb.net中遇到了WindowsHookEx的问题。如果我的电脑因3D渲染而过载,Windows会自动断开键盘挂钩,我的热键会停止工作。我四处搜索,似乎无法检测挂钩是活动还是断开。所以我尝试了“moodforaday”提出的这种方法 Is it possible to detect when a low-level keyboard hook has been automatically disconnected by Windows? 钩过气 - 自动-d

他声明定期使用GetLastInputInfo并在使用密钥时将GetLastInputInfo存储到另一个变量并比较结果。如果tick比你的旧变量新得多,则可能是它已断开连接。它是一个很棒的方法,但是它可以从鼠标等其他东西上升。在我的Hook类中没有Mouse钩子,因此当移动鼠标时我无法存储滴答计数的变量。所以现在我最终创建了一个钩子类的新实例并再次挂钩。如果存储的刻度比​​新刻度大10000个刻度,则每秒检查一次。

继续创建新的Hook实例是否可以?它将不断保持挂钩/取消挂钩,我想知道这是否会成为Windows的问题。

此外,如果有人有其他方法来检测钩子是否断开连接,请让我知道会解决这个问题。

1 个答案:

答案 0 :(得分:0)

在后台线程中进行3D渲染。仅对您直接访问UI控件的代码使用Control.Invoke

或者,您可以将渲染拆分为非常小的片段并将它们作为消息发布给自己,以便在主线程上处理。这样您就可以处理内部和外部消息。

在这两种情况下,您的应用程序都会及时响应,Windows没有理由认为它没有响应,并且您的键盘快捷键将保留在原位。