1.WM_QUERYENDSESSION
这个消息不能直接让应用程序退出,这个消息主要是询问应用程序是否已经作好了退出的准备,当所有的应用程序都对这个消息返回TRUE,系统会注销或关机。如果想退出程序,使用WM_CLOSE消息!
Windows在关机的时候会向所有顶层窗口广播一个消息WM_QUERYENDSESSION,其lParam参数可以区分是关机还是注销用户(注销用 户时lParam是ENDSESSION_LOGOFF)。然后Windows会等到所有的应用程序都对这个消息返回TRUE才会关机,
因此,只要我们的应用程序的主窗体对这个消息的处理返回FALSE,Windows就不会关机了。
但也不是绝对能阻止Windows关机,因为如果某个应用程序调用ExitWindowsEx(EWX_POWEROFF|EWX_FORCE,0);来关机,我这个程序就阻止不了,因为那样调用ExitWindowsEx,系统不会发出WM_QUERYENDSESSION消息,程序也就不能阻止Windows关机了。
2.WM_ENDSESSION
Windows将WM_ENDSESSION消息发送给先前收到WM_QUERYENDSESSION消息的每个窗口消息处理程序。如果由于另一个程序从WM_QUERYENDSESSION传回了0导致Windows不能关闭系统,那么WM_ENDSESSION的wParam参数为0。WM_ENDSESSION消息实际上回答了这个问题:我告诉过Windows可以把我结束掉,但是我真的被结束掉了吗?