找回密码
 立即注册

QQ登录

只需一步,快速开始

dary

葡萄城公司职员

1

主题

5

帖子

105

积分

葡萄城公司职员

积分
105

活字格认证

最新发帖
dary
葡萄城公司职员   /  发表于:2010-1-14 10:38  /   查看:10761  /  回复:8
当前有这样一个问题,在Win7或Vista环境中,在日文ime打开的情况下,线程的KeyboardHook无法拦截到F10键,后改用IMessageFilter,但IMessageFilter在SystemMenu激活后,也就是按了Alt之后,接不到任何键盘消息,所以现在考虑使用全局的 LowLevel KeyboardHook,但对于它的影响现在无法评估,所以我希望知道如果在控件中使用了 LowLevel KeyboardHook, 会对系统和应用程序带来什么影响。

8 个回复

倒序浏览
Carl
版主   /  发表于:2010-1-14 11:11:00
沙发
安全性问题:用户在输密码,结果按键被你截走了……
愿 Engine 归于沉寂,Timer 停止运动,Message Queue 不再流淌,Data Source 为我掌握
回复 使用道具 举报
ted
葡萄城公司职员   /  发表于:2010-1-14 11:24:00
板凳
现在的设计是:虽然LowLevelHook监听到了所有的键消息,但是只会把Control所在的UI线程的消息暴露给用户。

下面是我从MSDN上查到的:
1.        Low-Level KeyboardHook
The system calls this function every time a new keyboard input event is about to be posted into a thread input queue.
2.        KeyboardHook
The system calls this function whenever an application calls the GetMessage or PeekMessage function.
区别是WH_KEYBOARD_LL  要比WH_KEYBOARD 先触发,WH_KEYBOARD_LL 是由系统调用你的回调函数,而WH_KEYBOARD则是你钩的进程来调用你的回调函数。

现在考虑的是启用LowLevelHook对于系统有没有什么恶劣的影响?
回复 使用道具 举报
MultiRow
注册会员   /  发表于:2010-1-14 12:05:00
地板
我的感觉,LL和非LL的区别仅仅是在时机上不同,LL更早一些触发,因此,可以接到更多的消息。

因此,我觉得,产生的影响主要在:
1. 性能
如果处理函数的性能低,会导致程序的性能下降。

2. 拦截消息
如果拦截了不正确的消息,可能导致某些程序(比如:IME)错误。
回复 使用道具 举报
dary
葡萄城公司职员   /  发表于:2010-1-14 12:08:00
5#
会不会被杀毒软件拦截?
回复 使用道具 举报
Carl
版主   /  发表于:2010-1-14 13:50:00
6#
翻了一下MSDN,这个Hook只会影响当前线程:
The system calls this function every time a new keyboard input event is about to be posted into a thread input queue.

另外,如果我们的处理函数性能太差,这个Hook会被系统跳过:
The hook procedure should process a message in less time than the data entry specified in the LowLevelHooksTimeout value in the following registry key:
HKEY_CURRENT_USER\Control Panel\Desktop

The value is in milliseconds. If the hook procedure does not return during this interval, the system will pass the message to the next hook.
愿 Engine 归于沉寂,Timer 停止运动,Message Queue 不再流淌,Data Source 为我掌握
回复 使用道具 举报
MultiRow
注册会员   /  发表于:2010-1-14 17:47:00
7#
>> 如果我们的处理函数性能太差,这个Hook会被系统跳过:
太强悍了。
回复 使用道具 举报
MultiRow
注册会员   /  发表于:2010-1-14 17:48:00
8#

回复 5# dary 的帖子

没有挂全局钩子,因此不会存在安全隐患。因此杀毒软件应该不关心的。
回复 使用道具 举报
MushRoom
注册会员   /  发表于:2010-1-14 20:36:00
9#

回复 1# dary 的帖子

我记得J2.netE说过:高难度的问题来自不合理的需求。
lz可不可以把需求说下, 大家研究研究有没有简单的解决方案?
请问一下
你也是蘑菇吗?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部