3

我在 vb.net 中遇到了 WindowsHookEx 的问题。如果我的电脑过载,尤其是 3D 渲染,Windows 会自动断开我的键盘挂钩并且我的热键停止工作。我四处搜寻,似乎没有办法检测钩子是活动的还是断开的。所以我尝试了“moodforaday”提出的这种方法 是否可以检测到Windows何时自动断开低级键盘挂钩? 钩子已经自动-d

他表示定期使用 GetLastInputInfo 并在使用键时将 GetLastInputInfo 存储到另一个变量并比较结果。如果刻度比您的旧变量新得多,那么它很可能断开连接。这是一个很好的方法,但蜱可以从鼠标等其他东西上上升。在我的 Hook 类中没有鼠标钩子,因此当鼠标移动时我无法存储滴答计数的变量。所以现在我最终让它创建了一个新的钩子类实例并再次钩子。如果存储的刻度比​​新的刻度早 10000 刻度,它会每秒检查一次。

可以继续创建 Hooks 的新实例吗?它会不断地保持 Hooking/Unhooking,我想知道这是否会成为 Windows 的问题。

另外,如果有人有另一种方法来检测挂钩是否断开,请告诉我将解决整个麻烦。

4

1 回答 1

0

Do your 3D rendering in a background thread. Use Control.Invoke only for code where you directly access UI controls.

Alternately, you could split the rendering into very small pieces and post them to yourself as messages, to be handled on the main thread. This way you will be able to handle both internal and external messages.

In both cases, your application will be responding in a timely fashion, Windows will have no reason to consider it non-responding, and your keyboard shortcuts will stay in place.

于 2012-07-01T21:05:51.990 回答