当我的Windows程序(C / C ++)从Taskmgr.exe中被杀死时,有什么方法可以收到通知吗?它似乎没有收到任何特殊的Windows消息 - 它只是终止。
我不想阻止它终止,我只是想写一些手动终止的通知。
感谢。
答案 0 :(得分:3)
如果它是一个完整的Windows应用程序,您应该在应用程序退出之前在消息泵中获取WM_QUIT。
正如MSDN所述:http://msdn.microsoft.com/en-us/library/windows/desktop/ms632641(v=vs.85).aspx
这不会发布到窗口的消息队列中,您只能在主消息泵中检索它。
只有当它干净利落时才会这样。如果这个过程被杀死,这种情况永远不会发生。
一种可以检测到它在下次启动时被杀死的方法是在启动时创建一个文件并在关机时销毁,如果该文件在下次启动时仍然存在,则表示该进程已被终止,但是不是它是由于错误而被杀死,还是因为它是在用户请求中被杀死的。
答案 1 :(得分:1)
如果您需要立即知道您的进程何时被杀,我知道的唯一方法是使用另一个进程作为监视程序。如果使用OpenProcess()来获取有问题的进程的句柄,则可以等待该句柄(通过WaitForSingleObject或类似方法),并在进程终止时发出句柄信号。您需要与目标进程进行一些协调,以便跟踪关闭是干净还是强制。