上次发帖说得不清楚 导致很多人没有理解 所以这次再发
情况说明:
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类里怎么做,又或者如果要新建一个类来继承之类的话,那又要具体怎么做呢?
全部分都拿出来了,虚心求教。
情况说明:
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类里怎么做,又或者如果要新建一个类来继承之类的话,那又要具体怎么做呢?
全部分都拿出来了,虚心求教。
解决方案 »
- 初学,向大家求教,设置CShowDIBView类的基类
- STLport4.0可以被后续版本兼容吗?到底如何安装?
- 网址过滤问题
- 多个线程同时发送不同的数据到一个套接字,接收方怎么处理?
- 在不使用第三方控件的时候如何播放swf文件!!
- FindWindow得到句柄后,如何操作其上的一CEdit对象
- 请教:怎样编程实现从CAB文件中提取出一个文件?
- 很急很急!请问高手:如何将记录集保存到数据库里?完全覆盖原来的记录!我是初学者!100分
- 大家来帮帮忙!
- 请高手指点:在vc里编写的ActiveX控件中,如何加一个Vb里ADODB.Recordset类型的属性,并且在vb调用该ActiveX控件时能传该类型的变量!
- 求助!!!MFC Grid Control
- PostMessage 发送带字符串的参数
不像其它消息还会Dispatch出去
要怎么拦截感觉是个问题···又进而想到了一个新的问题 自身程序运行完了会发送WM_QUIT给自己来让自己退出的么?
这样的话如果我拦截了WM_QUIT,不就又会导致自己关机都关不了?
Windows编程没学好 哎~~期待高手回答
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就可以退出了
原来还是得用钩子解决~
加个CanExit上去这点还真是没想到
谢谢解疑~~~结贴散分~~~