我写了一个简单的测试程序(TestProgram.exe)来学习如何处理CTRL_CLOSE_EVENT,这是我的观察和我的问题:
1)当我双击TestProgram.exe启动它时,如果我现在转到任务管理器,TestProgram.exe列在"应用程序"下.当我在TestProgram.exe上执行"结束任务"时,我的CTRL_CLOSE_EVENT处理程序被调用.
但
2)当我打开命令提示符并启动TestProgram.exe时,它在"任务管理器"下的"后台进程"下列出,并且对其执行"结束任务"不会导致CTRL_CLOSE_EVENT.
我的实际应用程序如上面的案例2)中所述使用.当用户在我的应用程序上执行结束任务(在任务管理器中的后台进程下列出)时,我想做一些清理工作.
谢谢,克里希纳
通常,当进程被列为"应用程序"时,这意味着任务管理器已检测到进程具有GUI,并且GUI上的"结束任务"将首先尝试通过标准WM_CLOSE和/或WM_QUIT消息正常关闭GUI 然后通过蛮力终止GUI的过程TerminateProcess().另一方面,在"后台进程"上执行"结束任务"将立即执行暴力终止.
因此,在您的情况下,双击.exe文件会导致新的专用控制台进程自动运行您的应用程序,因此控制台的GUI被标记为"应用程序",但是当您首先打开控制台窗口时通过命令行执行.exe,您的应用程序在现有控制台中运行并共享控制台的原始GUI,因此您的应用程序没有自己的GUI,因此被标记为"后台进程".