WM_QUERYENDSESSION消息
当用户选择结束会话或应用程序调用某个系统关闭函数时,将发送 WM_QUERYENDSESSION 消息。 如果任何应用程序返回零,则会话不会结束。 系统一旦一个应用程序返回零,系统就会停止发送 WM_QUERYENDSESSION 消息。
处理此消息后,系统会发送 WM_ENDSESSION 消息,并将 wParam 参数设置为 WM_QUERYENDSESSION 消息的结果。
窗口通过其 WindowProc 函数接收此消息。
LRESULT CALLBACK WindowProc(
HWND hwnd, // handle to window
UINT uMsg, // message identifier
WPARAM wParam, // not used
LPARAM lParam // logoff option
);
参数
-
hwnd
-
窗口的句柄。
-
uMsg
-
WM_QUERYENDSESSION标识符。
-
wParam
-
此参数留待将来使用。
-
lParam
-
此参数可以是以下一个或多个值。 如果此参数为 0,则系统正在关闭或重启 (无法确定) 发生的事件。
值 含义 - ENDSESSION_CLOSEAPP
- 0x00000001
应用程序正在使用必须替换的文件、正在服务系统或系统资源耗尽的文件。 有关详细信息,请参阅 应用程序指南。 - ENDSESSION_CRITICAL
- 0x40000000
应用程序被迫关闭。 - ENDSESSION_LOGOFF
- 0x80000000
用户正在注销。 有关详细信息,请参阅 “注销”。 请注意,此参数是位掩码。 若要测试此值,请使用按位运算;不测试相等性。
返回值
应用程序应尊重用户的意图并返回 TRUE。 默认情况下, DefWindowProc 函数为此消息返回 TRUE 。
如果关闭会损坏正在烧毁的系统或媒体,则应用程序可以返回 FALSE。 但是,尊重用户的行为是很好的做法。
注解
当应用程序为此消息返回 TRUE 时,无论其他应用程序如何响应WM_QUERYENDSESSION消息,它都会收到WM_ENDSESSION消息。 收到此消息后,每个应用程序应立即返回 TRUE 或 FALSE ,并延迟任何清理操作,直到收到 WM_ENDSESSION 消息。
应用程序可以显示一个用户界面,提示用户在关闭时提供信息,但不建议这样做。 五秒钟后,系统会显示有关阻止关闭的应用程序的信息,并允许用户终止它们。 例如,Windows XP 显示一个对话框,而 Windows Vista 将显示全屏,其中包含有关应用程序阻止关闭的其他信息。 如果应用程序必须阻止或推迟系统关闭,请使用 ShutdownBlockReasonCreate 函数。 有关详细信息,请参阅 Windows Vista 的关机更改。
控制台应用程序可以使用 SetConsoleCtrlHandler 函数接收关闭通知。
服务应用程序可以使用 RegisterServiceCtrlHandlerEx 函数在处理程序例程中接收关闭通知。
示例
有关示例,请参阅 “注销”。
要求
要求 | 值 |
---|---|
最低受支持的客户端 |
Windows XP [桌面应用|UWP 应用] |
最低受支持的服务器 |
Windows Server 2003 [桌面应用|UWP 应用] |
标头 |
|
另请参阅