WM_QUERYENDSESSION消息
当用户选择结束会话或应用程序调用某个系统关闭函数时,将发送 WM_QUERYENDSESSION 消息。 如果任何应用程序返回零,则会话不会结束。 只要一个应用程序返回 零 ,系统就会停止发送WM_QUERYENDSESSION消息。
处理此消息后,系统会将 wParam 参数设置为WM_QUERYENDSESSION消息的结果发送WM_ENDSESSION消息。
窗口通过其 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 应用] |
标头 |
|
另请参阅