MFC響應WM_QUERYENDSESSION消息解決阻止系統關機問題

之前在windows上開發了一個MFC程序用來實現水印效果,作爲常駐程序保持運行狀態。但在win10上測試發現在系統關機/註銷/重啓這類操作時會彈出提示框提示該程序阻止操作,如下圖:

google查詢得知是沒有響應WM_QUERYENDSESSION 消息,導致關機這類操作時被阻止。

MSDN上原文:

The WM_QUERYENDSESSION message is sent when the user chooses to end the session or when an application calls one of the system shutdown functions. If any application returns zero, the session is not ended. The system stops sending WM_QUERYENDSESSION messages as soon as one application returns zero.

After processing this message, the system sends the WM_ENDSESSION message with the wParam parameter set to the results of the WM_QUERYENDSESSION message.

得知如果該消息返回0則不被處理,且消息終止向下傳遞,若想管控/禁止關機這類操作可攔截此消息入手,但現在我需要正常關機這類處理,便在程序中添加了WM_QUERYENDSESSION 消息響應,返回TRUE,以便消息正常向下傳遞,系統正常關機操作。MFC程序中處理OnQueryEndSession消息函數。

查詢還有一種方式是更改系統本地策略中的關機選項,比較暴力:

修改本地組策略,避免在重啓時出現“此程序正在阻止windows重新啓動”界面。

使用鍵盤組合鍵win+R調出運行欄,輸入gpedit.msc,在計算機配置中依次選擇管理模板>系統>關機選項,在關機選項下雙擊“關閉會阻止或取消關機的應用程序的自動終止功能”,點擊啓用

通過修改本地組策略,系統將對阻止關機的應用程序執行自動終止功能。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章