我注入了DLL,拦截WM_CLOSE,可是有时候程序会像记事本那样询问一下,如果点了取消程序就不退了,但是同样会发出WM_CLOSE,有没办法知道程序确实退出了
如何拦截WM_DESTROY,程序有时候就监听不到了,有时候又监听到了,不知道为什么

解决方案 »

  1.   


     错了。应该是收到:WM_QUIT 才是关闭。
      

  2.   

    WM_DESTROY这个可以确定程序是退出了,你可以拦截WM_CLOSE拦截WM_DESTROY不难吧.
    或者你取它的Handle,取不到了正常就是退出了.
      

  3.   

    我用SPY++拦截的时候没有看到WM_QUIT啊WM_DESTROY可以拦截到,只是有时候又拦截不到了,不知道为什么
      

  4.   

    WM_QUIT,如果是强制退出的可能会没有,如ExitProcess,或者TerminateProcess,如果一定要在任何条件下都知道其退出,就不在hook中做,而在外面单独写个程序来检测,如WaitForSingleObject(hProcess, INFINITE),spy++估计是按窗口来收消息,WM_QUIT没有指定窗口,故spy++拦不到
      

  5.   

    恩,HOOK消息之后加上一个进程快照会比较好一点……
      

  6.   

    Process32next遍历所有进程,找不到那个进程,就证明程序退出了
    DLL隐藏技术之类的除外