wm_queryendsession訊息是windows向你詢問windows能否關閉,wm_endsession訊息表示提示你windows即將關閉。故當應用程式退出時, wm_queryendsession訊息和wm_endsession訊息均不響應。也就是說也就是說,你的程式在執行狀態時,而系統由於某種原因需要登出或重啟(或關機),此時作業系統會向你詢問,但到你的同意(返回true)後,系統才能做進一步的操作。
windows 在登出、重起、關機之前會向每個當前正在執行的應用程式傳送wm_queryendsession訊息,
--> 如果該應用程式方便關閉的話,則在此訊息的訊息響應函式onqueryendsession()中返回非0值(true),否則返回0值(false)。
--> 如果當前系統正在執行的應用程式全部返回非0值,則windows的登出、重起、關機過程繼續下去,並且向所有執行的應用程式傳送wm_endsession訊息,並且訊息引數為true;
--> 如果當前系統正在執行的應用程式其中之一返回0值,則windows的登出、重起、關機過程被終止,並且不再繼續對剩餘的應用程式呼叫onqueryendsession()訊息響應函式,而是向已經呼叫過了onqueryendsession()訊息響應函式的應用程式傳送wm_endsession訊息,並且訊息引數為false。
所以乙個應用程式只要響應wm_endsession訊息,並在wm_endsession訊息的訊息響應函式onendsession(bool bending) 中根據引數bending來判斷系統最後是否真的要登出、重起、關機了,然後做出適當的反應即可。
msdn:
當使用者選擇關閉windows或者應用程式呼叫windows的exitwindows函式時,框架呼叫這個成員函式。如果應用程式返回0,則windows會話不會結束。只要有乙個應用程式返回了0,windows就停止呼叫onqueryendsession,並且向所有已經返回非零值的應用程式傳送乙個wm_endsession訊息,引數值為false。
onqueryendsession() 不返回才阻止!!!
一般在這裡開啟乙個詢問對話方塊。
--
MFC 獲得關機訊息 阻止Windows關機
wm queryendsession訊息是windows向你詢問windows能否關閉,wm endsession訊息表示提示你windows即將關閉。故當應用程式退出時,wm queryendsession訊息和wm endsession訊息均不響應。也就是說也就是說,你的程式在執行狀態時,而系統...
windows 上驅動阻止關機重啟操作
windows 上關機重啟有很多相關的操作 hook 乙個點搞不定 具體需要以下 4 處來布控 ssdt hook ntinitiatepoweraction 函式 直接返回失敗廢掉這個函式 ssdt hook ntsetsystempowerstate 函式 也是直接返回失敗 shadow ssd...
windows遠端關機
文章分類 作業系統 我們在進行伺服器遠端維護時,經常需要進行遠端關機 重啟等操作,但是經常由於程序的異常退出導致伺服器的出現假死現象,無法正常關機或重啟,然後不得不得求助於機房人員協助硬重啟,筆者在使用中,總結的經驗是同時使用shutdown強制關機重啟命令和開始選單的關機重啟命令,基本可以保障伺服...