为什么当我的程序退出后HOOK就自动失效了
我没UnhookWindowsHookEx和FreeLibrary,请问有什么办法?

解决方案 »

  1.   

    既然是全局hook,那么应该体应该是DLL,你的程序退出没有关系
      

  2.   

    进程结束后,windows会自动把这个进程设置的HOOK注销的。
      

  3.   

    我是这样的
    DLL中:
    LRESULT CALLBACK KeyboardProc(int nCode,WPARAM wParam,LPARAM lParam)
    {
    ...
    return CallNextHookEx(hKeyboardProc,nCode, wParam, lParam );
    }extern "C" __declspec(dllexport)
    void starthook()
    {
    hKeyboardProc=SetWindowsHookEx(WH_KEYBOARD,KeyboardProc,dllhin,0);
    }在EXE中:
    loadlibray()-> starthook()
    然后EXE推出,但HOOK也随之消失,我希望EXE退出后HOOK不被windows注销,
    要怎么做?
      

  4.   

    一般情况下FreeLibrary是系统自动完成的。DLL被卸则其HOOK代码也消失了。
      

  5.   

    你应该在DllMain里的
    DLL_PROCESS_ATTACH: starthook();
    而不是在exe中
    在dll就不会消失!
      

  6.   

    首先上面有位仁兄说多LoadLibrary这种方法是不应该的
    因为当你SetWindowHookEx的时候,系统会遍历所有进程,并把dll(你应该写在dll里)的代码加载进每一个进程的地址空间.所以只要你不UnhookWIndowEx
    ,那你在exe退出的时候,其实hook的作用依然是存在的值得注意的是你应该把hook的代码放在dll里,因为n个进程"等"着加载它,另外你希望你的程序退出后依然有作用,这样当然是没问题,只要你不调用UnhookWindowEx,但你还是应该在不用的时候记得调用Un...
    Because the hook will degrade system performance.
      

  7.   

    不知你是否知道有个远线程技术?
    本来我以为这个技术可以,但是,
    http://www.csdn.net/expert/topic/1029/1029123.xml?temp=.8733026
      

  8.   

    Windows进程退出时会自动UnHook该进程设置过的任何钩子。同时解除映射到多个进程的DLL映像。你可以设法在一个系统进程(如Explorer)里面调用SetWindowsHookEx,方法可以是CreateRemoteThread,或者利用其他钩子注入。
      

  9.   

    hook的处理代码是要放到dll中的。
    要是他还要退出,你就在hook的处理函数里来个无限循环
      

  10.   

    Windows进程退出时会自动UnHook该进程设置过的任何钩子。同时解除映射到多个进程的DLL映像。
    我想是这样的~
      

  11.   

    我把hook和所有的功能放在dll中
    只用一个exe   loaddll 和执行一个函数,就可以做到在w98  w2k下通过
    其他系统没有试过,应该没问题,但是debug和release好像有点不同!