如何防止 Windows 重新啟動或關機

一般 MFC Dialog base 的程式,我們會在 OnInitDialog() 做一些初始化的動作;然後在 PostNcDestroy() 做一些清除資源,或將資料寫回 HD 的動作。

但在 Windows 重新啟動或關機的情況下,是不會執行到 PostNcDestroy() 的,這時就會造成一些程式動作未完成。

Windows 有兩個 Message 跟重新啟動或關機有關:
  1. WM_QUERYENDSESSION :詢問程式是否可關機,回傳 TRUE 表示可以,FALSE 則不行。此外 lParam 會指出一些程式關閉的情況,不過在 MFC OnQueryEndSession() 都省略掉了。
  2. WM_ENDSESSION:程式執行完 WM_QUERYENDSESSION 後呼叫 (不論其傳回結果為 TRUE 或 FASE),其傳回結果會反應在 wParam;而 lParam 的內容同 WM_QUERYENDSESSION,不過在 MFC OnEndSession() 一樣被省略了。
所以這兩個地方都可以拿來做跟 PostNcDestroy() 一樣的工作,差別在 WM_QUERYENDSESSION 可以傳回 FALSE 來阻止 Windows 重新啟動或關機而己。

留言

這個網誌中的熱門文章

Linux 批次檔的寫法

【分享】如何顯示 Debug Message

[分享] Visual Studio 遠端偵錯