對于windows form的應用程序, 操作系統其實在注銷或者關閉的時候,會發一個WM_QueryEndSession的消息給每一個窗體,每一個窗體有一個表決的機會,返回是否退出.這個跟form 的closing 時間一樣. 一旦有一個程序返回false,那么這個注銷動作就取消了.默認.net 寫的windows 應用程序都是表決true,就是系統注銷的時候,程序自動退出.
所以你要相應系統注銷這個消息, 比如提醒用戶要不要退出,或者作一些記錄log的操作, 在.net 中只要掛一個事件處理到Microsoft.Win32.SystemEvents.SessionEnding 這個事件上面去.你可以做一些自定義的操作.比如:









//MessageBox...
//取消系統關閉 e.cancel=true

當然也可以重載消息處理,自己處理WM_QueryEndSession 這個消息.
對于控制臺應用程序,一般只能做到被動的接受,可以記錄一下什么時候程序被關掉,是應為什么原因
實現方式其實就是調用系統api,有一些 SetConsole 打頭的函數,用來實現 控制臺應用程序的自定義,比如設置字體,顏色,窗體大小子類的. 2005 中其實對這些api做了一些包裝. 這里主要是利用 SetConsoleCtrlHandler ,注冊一個Handler
一下是vb.net 的一個框架
























3.對于windows 服務,api的話采取的是跟 console 類似的處理方式.只不過的他的狀態切換更多
主要是調用一個 RegisterServiceCtrlHandler 的api
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
