调用UnhookWindowsHookEx前先判断g_hhook是否为空。
解决方案 »
- VS有查看dll内容的工具吗?
- 如何使用代码创建一个窗口
- 给父窗体的GWL_EXSTYLE添加了WS_CLIPCHILDREN | WS_CLIPSIBLINGS属性,子窗体的CtrlList却被覆盖了[困扰了我N久的问题]
- 大虾帮我看看这段转灰度的代码
- 如何画一个不带填充颜色的矩形?
- 求救!我的基于对话框的程序中的主菜单不能SetCheck,怎么回事?
- 新手问题:如何在ActiveX控件或者COM里实现IObjectSafty 接口?
- 有什么方法可以将父进程的handle传递给子进程?
- 一个关于cstring类的问题
- 在listbox中显示乱码是为什么?
- 100分,寻求好的建议!
- SDI窗口,视类为CFormView,将此视类与一对话框模板相连,我怎么改变此对话框或此视类的背影色?
这个时候你的g_hhook虽然非空,但它所指的挂钩句柄却已经关闭了。因为进程是操作系统进行资源管理的边界,为一个进程分配的资源(包括挂钩句柄)在进程退出或者关闭时由操作系统自动清理,操作系统的健壮性也体现在这里。
这和你分配内存是同样的道理,你虽然可以做一个程序(进程)故意泄露很多内存,但当你关闭该程序(进程)时,这些泄露的内存都会有操作系统释放的。
因为对g_hhook的赋值语句只有:g_hhook = SetWindowsHookEx()而且,这句总是使g_hhook指向非NULL值.
To xiesl():
"你的HOOK已经卸掉了,在你关闭进程B时。"如果是这样,那太好了.
你的解释很好,我很欣赏,希望你是对的.
请大家评论.如果正确就结帐