#include "stdafx.h"
#define ENDSESSION_CLOSEAPP 0x00000001
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
// TODO: Place code here.
HWND hwnd = FindWindow(NULL,TEXT("扫雷"));//找到扫雷句柄
SendMessage(hwnd,WM_QUERYENDSESSION,0,ENDSESSION_CRITICAL);
SendMessage(hwnd,WM_ENDSESSION,1,ENDSESSION_CRITICAL);
return 0;
}
msdn上说:
ENDSESSION_CRITICAL
The application is forced to shut down.意思就是可以强制结束应用程序。
但是我这段程序写起来一开始提示:
“ENDSESSION_CRITICAL”未定义。之后加上了MSDN上定义的常量0x4000000
可以编译通过,但是执行之后扫雷程序依然运行的很正常,不知道为什么
难道是WM_ENDSESSION消息不能结束应用程序·此消息是不是只有Csrss子系统发出才有作用???或者是CSRSS程序在内部还有什么的处理?请大牛指点下??
To force all applications to terminate, use ExitWindowsEx, and specify the EXW_FORCE flag. This prevents the system from sending WM_QUERYENDSESSION messages.
The MSDN article states "The application need not call the DestroyWindow or PostQuitMessage function when the session is ending." When your msgproc returns from handing WM_ENDSESSION you have only a few seconds to clean up and exit your program. Otherwise the system will nuke your process with TerminateProcess.
If your app reacts badly to TerminateProcess then you need to ignore the MSDN article's advice and execute your normal close sequence: DestroyWindow, PostQuitMessage, etc. This is required if you want to exit gracefully.
The MSDN article states "The application need not call the DestroyWindow or PostQuitMessage function when the session is ending." When your msgproc returns from handing WM_ENDSESSION you have only a few seconds to clean up and exit your program. Otherwise the system will nuke your process with TerminateProcess.
If your app reacts badly to TerminateProcess then you need to ignore the MSDN article's advice and execute your normal close sequence: DestroyWindow, PostQuitMessage, etc. This is required if you want to exit gracefully.