全局钩子,调用方结束后,钩子是否还有效? 既然是全局钩子,dll被映射到别的进程去了,为什么调用方进程结束后,钩子会失效呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 因为启动进程是这个dll的宿主,hMod Handle to the DLL containing the hook procedure pointed to by the lpfn parameter。当这个exe关掉后,其他进程找不到这个模块的具体信息了,因为其他进程里的dll只是一个印射。如果你想驻留到整个系统,你必须找一个长期运行的exe,保证dll的真身一直存在。比如winlogon进程。 莫非你的意思是,把钩子dll注入到winlogon,让winlogon来做宿主?感觉确实不错,不过winlogon应该是无窗口的进程,小弟还没搞清楚是不是“全局消息钩子只能在有窗口的程序中调用”。http://topic.csdn.net/u/20081002/12/c010a69a-dd28-4fdf-8af2-ebb778c3f820.html?seed=1913519861谢谢 只要钩子被加载到其它进程之后,调用方进程再退出(不调用UnhookWindowsHookEx),钩子就会继续有效。 应用程序结束 就没用了 因为你的DLL宿主exe已经结束了 个人理解,可能不正确..DLL被加载时有地址空间,这个地址空间在你的加载DLL的进程内,比如我有个程序HookInstall.exe,是用来安装钩子的,钩子类型为WH_KEYBOARD,成功安装钩子后,DLL就被映射到那些产生了KEYBOARD消息的进程中,当进程HookInstall.exe退出时,DLL的地址空间也就跟着消失了,所以钩子失效..不知我的理解对不对. 像线程、进程之类不是有个引用计数吗?映射进别的进程会不会类似有引用一样,有引用怎么能随便释放dll呢 如果你调用了Unhook,那么新产生的窗口将不再调用你设置的钩子,但是之前已经被钩住的钩子还在继续生效,直到所有这些被钩住的窗口都被销毁,全局钩子才完全退出,此时钩子DLL才被真正解锁卸载。一般在调试期间,通过DllMain函数多做一点判断,只钩住特定目标内的进程和窗口,其他的窗口都返回FALSE,以免调试结束时你的钩子DLL被锁定后无法再次编译链接,Release版本可以解除这些限制。 只要钩子被加载到其它进程之后,调用方进程再退出(不调用UnhookWindowsHookEx),钩子就会继续有效。===================这个好像不对,当调用方进程结束之后,这个钩子都不再起作用了。我以前也产生过疑问的 求助:对图像进行变换,matlab中的cp2tform和imtransform函数用c++或OpenCV该如何实现 编译时莫名其妙的错误,等答案 创建一个XML文件该怎么创建,内容要怎么写? 请同志们帮助看看代码的错误! 散分 如何表示“区间”?进来看下 文档中心里的那个apihook例程你们下载没有?我请教一个关于apihook的问题 请帮我看看下面代码如何改写! ,“记录集为只读”的错误 bho atl 怎样判断一个applet弹出窗口? 各位大侠,跪求了。。。关于linux下socket编程。。。 EVC4的dialog的scroll
hMod
Handle to the DLL containing the hook procedure pointed to by the lpfn parameter。当这个exe关掉后,其他进程找不到这个模块的具体信息了,因为其他进程里的dll只是一个印射。如果你想驻留到整个系统,你必须找一个长期运行的exe,保证dll的真身一直存在。比如winlogon进程。
感觉确实不错,不过winlogon应该是无窗口的进程,小弟还没搞清楚是不是“全局消息钩子只能在有窗口的程序中调用”。http://topic.csdn.net/u/20081002/12/c010a69a-dd28-4fdf-8af2-ebb778c3f820.html?seed=1913519861
谢谢
DLL被加载时有地址空间,这个地址空间在你的加载DLL的进程内,比如我有个程序HookInstall.exe,是用来安装钩子的,钩子类型为WH_KEYBOARD,
成功安装钩子后,DLL就被映射到那些产生了KEYBOARD消息的进程中,当进程HookInstall.exe退出时,DLL的地址空间也就跟着消失了,所以钩子失效..
不知我的理解对不对.
一般在调试期间,通过DllMain函数多做一点判断,只钩住特定目标内的进程和窗口,其他的窗口都返回FALSE,以免调试结束时你的钩子DLL被锁定后无法再次编译链接,Release版本可以解除这些限制。
===================
这个好像不对,当调用方进程结束之后,这个钩子都不再起作用了。我以前也产生过疑问的