线程专用钩子和全局钩子的区别
2015-08-21 11:07
183 查看
其实就是全局和局部的区别
如果可以用线程Hook实现就最好用线程Hook
因为Hook技术用的不好会大大降低整个Windows系统的性能
这也是为什么WinCE不支持HOOK的原因了
至于键盘HOOK用SetWindowsHookEx带WH_KEYBOARD参数就可以了
比如你做一个全局的键盘HOOK,这样不管当前激活的应用程序是什么
只要有键盘消息,windows都会先问问你的Hook Proc,
“老第,这个键如何啊?”
完了你的Hook Proc拿过来左看右看,
最后说
“哎呀,我不要这个键,还给你”
你说累不累啊。
消息队列是以线程为基础的.一个局部HOOK勾挂的是一个进程内所有线程的消息.
此类实现由于不涉及进程CONTEXT切换,是轻量极的HOOK.
全局的HOOK会映射到所有加载USER32.DLL的进程中,其实是USER32.DLL为这些进程调用LOADLIBRARY来加载HOOK所在的DLL.
并且在所有的消息在被送到消息处理前先调用HOOKPROC.当HOOKPROC决定该消息已经被处理完毕,那么就从线程消息队列里去除该消息.
HOOKPROC本身的调用按照被加载的先后次序从后到前备调用.
如果可以用线程Hook实现就最好用线程Hook
因为Hook技术用的不好会大大降低整个Windows系统的性能
这也是为什么WinCE不支持HOOK的原因了
至于键盘HOOK用SetWindowsHookEx带WH_KEYBOARD参数就可以了
比如你做一个全局的键盘HOOK,这样不管当前激活的应用程序是什么
只要有键盘消息,windows都会先问问你的Hook Proc,
“老第,这个键如何啊?”
完了你的Hook Proc拿过来左看右看,
最后说
“哎呀,我不要这个键,还给你”
你说累不累啊。
消息队列是以线程为基础的.一个局部HOOK勾挂的是一个进程内所有线程的消息.
此类实现由于不涉及进程CONTEXT切换,是轻量极的HOOK.
全局的HOOK会映射到所有加载USER32.DLL的进程中,其实是USER32.DLL为这些进程调用LOADLIBRARY来加载HOOK所在的DLL.
并且在所有的消息在被送到消息处理前先调用HOOKPROC.当HOOKPROC决定该消息已经被处理完毕,那么就从线程消息队列里去除该消息.
HOOKPROC本身的调用按照被加载的先后次序从后到前备调用.
相关文章推荐
- POJ 2092 Grandpa is Famous 水
- sscanf()中表达式的用法
- iOS宏定义的使用与规范
- Java实现归并排序和快速排序
- Android如何获取手机上面已经安装的app
- IE7浏览器窗口大小改变事件执行多次bug及IE6/IE7/IE8下resize问题
- MySQL5.6.17学习笔记(二)索引介绍
- ipython 报错:pkg_resources.DistributionNotFound: importlib
- Android如何键盘按键响应事件
- MySql索引算法原理解析(通俗易懂,只讲B-tree)
- linux基础教程---用户和组操作
- java一些重要工具类
- @清晰掉 数组名只是一个符号的论点
- Web学习之HTML
- phpstorm+Xdebug断点调试PHP
- Toast使用
- greenDao_2.0.0学习笔记之1-简介
- 137 Single Number II
- windows环境下的opencv在qt(msvc)上使用的配置
- AIXnfs到linux全库迁移