上次发帖说得不清楚 导致很多人没有理解 所以这次再发
情况说明:
VC6的MFC创建的进程A跟进程B
都没有另外创建过子线程
所以A B都是默认的只有一个APP类和一个DLG类
然后A用快照,获取了B的线程ID,然后用PostThreadMessage发送了一个WM_QUIT消息过去(A是特地这么做的,所以希望不要问为什么要这样做还有A怎么做比较好,现在重要的是B)
B没有创建过子线程,那么就是B的主线程接收到消息退出了
结果当然是导致B这个进程整个进程都退出了
现在问题就是:
在B中应该怎么编码,才可以把这个WM_QUIT拦下来不让进程退出
注意:B只有MFC默认创建的APP类和DLG类在手上
ON_THREAD_MESSAGE的话可以拦下其他消息,比如WM_KEYUP什么的,但是WM_QUIT拦不了
那我应该在APP类里怎么做,又或者如果要新建一个类来继承之类的话,那又要具体怎么做呢?
全部分都拿出来了,虚心求教。

解决方案 »

  1.   

    WM_QUIT消息是会令GetMessage直接返回0从而导致退出
    不像其它消息还会Dispatch出去
    要怎么拦截感觉是个问题···又进而想到了一个新的问题  自身程序运行完了会发送WM_QUIT给自己来让自己退出的么?
    这样的话如果我拦截了WM_QUIT,不就又会导致自己关机都关不了?
    Windows编程没学好 哎~~期待高手回答
      

  2.   

    HHOOK SetWindowsHookEx(
      int idHook,        // hook type
      HOOKPROC lpfn,     // hook procedure
      HINSTANCE hMod,    // handle to application instance
      DWORD dwThreadId   // thread identifier
    );idHOOK传WH_GETMESSAGEBOOL g_bCanExit;    // 保证进程能正常退出
    LRESULT CALLBACK GetMsgProc(
      int code,       // hook code
      WPARAM wParam,  // removal option
      LPARAM lParam   // message
    )
    {
       if (g_bCanExit && message == WM_QUIT)
       {
          //过滤掉WM_QUIT
       }
       else 
       {
          CallNextHookEx();
       }
    }如果你需要进程退出,那么将g_bCanExit = FLASE, 在发WM_QUIT就可以退出了
      

  3.   


    原来还是得用钩子解决~
    加个CanExit上去这点还真是没想到
    谢谢解疑~~~结贴散分~~~