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 應用程式] |
標頭 |
|
另請參閱