WM_QUERYENDSESSION與WM_ENDSESSION

來源:互聯網
上載者:User

標籤:als   none   進入   系統   one   發送   create   ali   .com   

此文已由作者王榮濤授權網易雲社區發布。

歡迎訪問網易雲社區,瞭解更多網易技術產品運營經驗。



首先XP系統和Vista以後的系統,這兩個訊息的處理方式是不同的。


XP系統


系統發送WM_QUERYENDSESSION,如果你返回FALSE,那麼大多數情況下,系統的登出操作會被終止,並且接下來收到的WM_ENDSESSION的wParam參數值為FALSE。按照微軟的應用程式設計指導,這個時候你需要出UI告訴使用者被終止的原因。


應用程式可以暫時不響應這個訊息,比如先不會返回,而是在處理這個訊息的代碼中彈出一個模態對話方塊提示使用者選擇。


預設情況下,你有5秒的時間來處理這個事情。超過5秒後系統出一個對話方塊提示該應用程式無響應。


如果任意頂層視窗在處理WM_QUERYENDSESSION的時候返回了FASLE,那麼登出過程會被取消,之前收到這個訊息的視窗又會收到一條WM_ENDSESSION訊息,並且它的wParam將為FALSE。


只有當所有頂層視窗收到WM_QUERYENDSESSION之後都返回TRUE,它們才會被一次發送WM_ENDSESSION並且wParam訊息為TRUE。一旦進入這一步,登出過程無法撤銷。


處理WM_ENDSESSION的時間也是5秒,超過後系統也會彈窗提示。一旦應用程式響應了WM_ENDSESSION訊息,Windows會關閉它。接下來,Windows會繼續逐個向剩下的應用程式發送WM_ENDSESSION。


Vista以後的系統


相對於XP系統,Vista系統在以下一些方面進行了修改:


  • 未響應應用程式提示的UI方面的改進

  • 允許強制關閉

  • 無法悄悄撤銷登出過程(WM_QUERYENDSESSION返回FALSE)

  • 提供阻止關機的API,不使用這些API而僅僅對WM_QUERYENDSESSION返回FALSE是不行的

  • 某些類型的應用程式(比如控制台程式和無可見頂層視窗的程式)將不再被允許阻止關機操作;5秒內對任何訊息無響應的程式在關機過程中會被終止

  • 預設逾時值修改(主要是減少)


Vista以後系統處理關機的最佳做法


  • 盡量不要阻止關機,這樣給使用者的體驗是最好的

  • 那些必須要阻止關機的應用必須使用新的API:

  • 在系統關機前提前知道需要阻止關機的應用需要在關鍵代碼之前調用ShutdownBlockReasonCreate(),在這塊代碼後調用ShutdownBlockReasonDestroy();如果在收到WM_QUERYENDSESSION時操作尚未完成,那麼返回FALSE

  • 在收到WM_QUERYENDSESSION的時候才知道自己是否要阻止關機的應用程式需要在該訊息的處理函數裡面調用ShutdownBlockReasonCreate()並返回FALSE,然後在關鍵工作完成之後調用ShutdownBlockReasonDestroy()

  • 沒有可見頂層視窗的應用程式需要使用超過30秒的時間來處理WM_ENDSESSION時需要在收到WM_QUERYENDSESSION的時候調用ShutdownBlockReasonCreate()然後返回TRUE。



網易雲免費體驗館,0成本體驗20+款雲產品! 

更多網易技術、產品、運營經驗分享請點擊。


相關文章:
【推薦】 【RabbitMQ學習記錄】-訊息佇列儲存機制源碼分析
【推薦】 Puppeteer入門初探

WM_QUERYENDSESSION與WM_ENDSESSION

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.