首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否可以检测到低级键盘挂钩何时被Windows自动断开?

是否可以检测到低级键盘挂钩何时被Windows自动断开?
EN

Stack Overflow用户
提问于 2011-07-18 11:17:40
回答 5查看 4.7K关注 0票数 11

我正在开发一个使用键盘钩子的程序。但是,当运行程序的PC只是稍微超载时,它会导致Windows断开钩子与程序的连接,导致它不再对击键做出响应。

有没有办法防止这种情况,或者更好的是,提出一种不同的方法来解决完全相同的问题,通过使用不同的体系结构,可能涉及管道?

EN

Stack Overflow用户

回答已采纳

发布于 2011-07-18 14:37:12

你不能“检测”到这一点,而且你绝对不需要这样做。您所描述的是一项功能,特别是在Windows7中引入的一项功能,用于保护您的系统免受流氓应用程序的攻击。

The The The

适用文档

因此对其进行描述(请特别注意粗体部分):

钩子过程处理消息的时间应少于

以下注册表项中的值:

HKEY

_

当前

_

用户\控制面板\桌面

该值以毫秒为单位。如果钩子程序超时,系统会将消息传递给下一个钩子。然而,

在Windows 7和更高版本中,钩子将在不调用的情况下静默删除。应用程序无法知道挂钩是否被移除。

这里的解决方案肯定是

注释

找出一种“检测”钩子何时卸载并重新安装的方法。当操作系统卸载钩子时,您应该已经意识到自己做错了什么。

首先

时间到了。

实际的解决方案是重新设计您的应用程序,以便更快地从钩子程序返回。理想情况下,您应该几乎立即返回。如果您需要运行某种类型的密集计算来响应低级消息(我真的不能想象您为什么会这样做),那么您应该存储接收到的信息,从钩子过程返回,并在以后进行处理(可能在单独的线程上)。

实际上,这几乎是

完全正确

文档继续提出的建议:

注意:

调试挂钩无法跟踪此类低级键盘挂钩。如果应用程序必须使用低级挂钩,它应该在专用线程上运行挂钩,该线程将工作传递给工作线程,然后立即返回。在应用程序需要使用低级钩子的大多数情况下,它应该监控原始输入。这是因为原始输入可以异步地监视针对其他线程的鼠标和键盘消息,这比低级挂钩更有效。有关原始输入的详细信息,请参阅

原始输入

..。

票数 19
EN
查看全部 5 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6728335

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档