【发布时间】:2012-07-02 05:05:51
【问题描述】:
我在 vb.net 中遇到了 WindowsHookEx 的问题。如果我的电脑过载,尤其是 3D 渲染,Windows 会自动断开我的键盘挂钩并且我的热键停止工作。我四处搜寻,似乎没有办法检测钩子是活动的还是断开的。所以我尝试了“moodforaday”提出的这个方法 Is it possible to detect when a low-level keyboard hook has been automatically disconnected by Windows? hook-has-been-automatically-d
他表示定期使用 GetLastInputInfo 并在使用键时将 GetLastInputInfo 存储到另一个变量并比较结果。如果刻度比您的旧变量新得多,那么它很可能断开连接。这是一个很好的方法,但蜱可以从鼠标等其他东西上上升。在我的 Hook 类中没有鼠标钩子,因此当鼠标移动时我无法存储滴答计数的变量。所以现在我最终让它创建了一个新的钩子类实例并再次钩子。如果存储的刻度比新的刻度早 10000 刻度,它会每秒检查一次。
可以继续创建新的 Hooks 实例吗?它会不断地保持 Hooking/Unhooking,我想知道这是否会成为 Windows 的问题。
另外,如果有人有其他方法来检测挂钩是否断开,请告诉我将解决整个麻烦。
【问题讨论】:
-
嗯,不要那样做。如果这是机器上的结构问题,只需提高超时值即可。 HKEY_CURRENT_USER\Control Panel\Desktop\LowLevelHooksTimeout 值。
-
我不能,这将安装在其他客户端机器上。
-
那听起来好像是你的程序有问题。永远不要让 UI 线程死机超过一秒钟。应该很容易识别,Windows 将主窗口替换为 3 秒后显示“无响应”的幽灵窗口。解决这个问题,丢失的钩子也会自动解决。
-
死了是什么意思?什么时候进入无响应模式?
标签: vb.net