调用UnhookWindowsHookEx前先判断g_hhook是否为空。

解决方案 »

  1.   

    你的HOOK已经卸掉了,在你关闭进程B时。
    这个时候你的g_hhook虽然非空,但它所指的挂钩句柄却已经关闭了。因为进程是操作系统进行资源管理的边界,为一个进程分配的资源(包括挂钩句柄)在进程退出或者关闭时由操作系统自动清理,操作系统的健壮性也体现在这里。
    这和你分配内存是同样的道理,你虽然可以做一个程序(进程)故意泄露很多内存,但当你关闭该程序(进程)时,这些泄露的内存都会有操作系统释放的。
      

  2.   

    判断一下 g_hook是否为 null,如是,就不用 Unhook了。
      

  3.   

    To zcpro(zcpro):调用UnhookWindowsHookEx前,判断g_hhook总是不空。
    因为对g_hhook的赋值语句只有:g_hhook = SetWindowsHookEx()而且,这句总是使g_hhook指向非NULL值.
    To xiesl():
     "你的HOOK已经卸掉了,在你关闭进程B时。"如果是这样,那太好了. 
    你的解释很好,我很欣赏,希望你是对的.
      

  4.   

    xiesl()的解释对吗? 
    请大家评论.如果正确就结帐