国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

如何讓自己的應(yīng)用程序,控制臺(tái)程序,windows 服務(wù)收到操作系統(tǒng)注銷或者重啟的消息?

2019-11-17 05:25:31
字體:
供稿:網(wǎng)友
對(duì)于windows form的應(yīng)用程序, 操作系統(tǒng)其實(shí)在注銷或者關(guān)閉的時(shí)候,會(huì)發(fā)一個(gè)WM_QueryEndsession的消息給每一個(gè)窗體,每一個(gè)窗體有一個(gè)表決的機(jī)會(huì),返回是否退出.這個(gè)跟form 的closing 時(shí)間一樣. 一旦有一個(gè)程序返回false,那么這個(gè)注銷動(dòng)作就取消了.默認(rèn).net 寫的windows 應(yīng)用程序都是表決true,就是系統(tǒng)注銷的時(shí)候,程序自動(dòng)退出.


所以你要相應(yīng)系統(tǒng)注銷這個(gè)消息, 比如提醒用戶要不要退出,或者作一些記錄log的操作, 在.net 中只要掛一個(gè)事件處理到Microsoft.Win32.SystemEvents.SessionEnding 這個(gè)事件上面去.你可以做一些自定義的操作.比如:

如何讓自己的應(yīng)用程序,控制臺(tái)程序,windows 服務(wù)收到操作系統(tǒng)注銷或者重啟的消息?(圖一)PRivate void HookSessionEnding()
如何讓自己的應(yīng)用程序,控制臺(tái)程序,windows 服務(wù)收到操作系統(tǒng)注銷或者重啟的消息?(圖二)如何讓自己的應(yīng)用程序,控制臺(tái)程序,windows 服務(wù)收到操作系統(tǒng)注銷或者重啟的消息?(圖三)如何讓自己的應(yīng)用程序,控制臺(tái)程序,windows 服務(wù)收到操作系統(tǒng)注銷或者重啟的消息?(圖四){
如何讓自己的應(yīng)用程序,控制臺(tái)程序,windows 服務(wù)收到操作系統(tǒng)注銷或者重啟的消息?(圖五)Microsoft.Win32.SystemEvents.SessionEnding +=
如何讓自己的應(yīng)用程序,控制臺(tái)程序,windows 服務(wù)收到操作系統(tǒng)注銷或者重啟的消息?(圖五)new Microsoft.Win32.SessionEndingEventHandler(this.OnSessionEnding);
如何讓自己的應(yīng)用程序,控制臺(tái)程序,windows 服務(wù)收到操作系統(tǒng)注銷或者重啟的消息?(圖六)}
如何讓自己的應(yīng)用程序,控制臺(tái)程序,windows 服務(wù)收到操作系統(tǒng)注銷或者重啟的消息?(圖一)private void OnSessionEnding( object sender,
如何讓自己的應(yīng)用程序,控制臺(tái)程序,windows 服務(wù)收到操作系統(tǒng)注銷或者重啟的消息?(圖一)Microsoft.Win32.SessionEndingEventArgs e )
如何讓自己的應(yīng)用程序,控制臺(tái)程序,windows 服務(wù)收到操作系統(tǒng)注銷或者重啟的消息?(圖二)如何讓自己的應(yīng)用程序,控制臺(tái)程序,windows 服務(wù)收到操作系統(tǒng)注銷或者重啟的消息?(圖三)如何讓自己的應(yīng)用程序,控制臺(tái)程序,windows 服務(wù)收到操作系統(tǒng)注銷或者重啟的消息?(圖四){
如何讓自己的應(yīng)用程序,控制臺(tái)程序,windows 服務(wù)收到操作系統(tǒng)注銷或者重啟的消息?(圖五)    // the user session is ending
        //MessageBox...
        //取消系統(tǒng)關(guān)閉 e.cancel=true
如何讓自己的應(yīng)用程序,控制臺(tái)程序,windows 服務(wù)收到操作系統(tǒng)注銷或者重啟的消息?(圖六)}

 當(dāng)然也可以重載消息處理,自己處理WM_QueryEndSession 這個(gè)消息.

對(duì)于控制臺(tái)應(yīng)用程序,一般只能做到被動(dòng)的接受,可以記錄一下什么時(shí)候程序被關(guān)掉,是應(yīng)為什么原因

實(shí)現(xiàn)方式其實(shí)就是調(diào)用系統(tǒng)api,有一些 SetConsole 打頭的函數(shù),用來實(shí)現(xiàn) 控制臺(tái)應(yīng)用程序的自定義,比如設(shè)置字體,顏色,窗體大小子類的. 2005 中其實(shí)對(duì)這些api做了一些包裝. 這里主要是利用 SetConsoleCtrlHandler ,注冊(cè)一個(gè)Handler

一下是vb.net 的一個(gè)框架

如何讓自己的應(yīng)用程序,控制臺(tái)程序,windows 服務(wù)收到操作系統(tǒng)注銷或者重啟的消息?(圖二)如何讓自己的應(yīng)用程序,控制臺(tái)程序,windows 服務(wù)收到操作系統(tǒng)注銷或者重啟的消息?(圖三)Module Module1Module Module1 
如何讓自己的應(yīng)用程序,控制臺(tái)程序,windows 服務(wù)收到操作系統(tǒng)注銷或者重啟的消息?(圖七)如何讓自己的應(yīng)用程序,控制臺(tái)程序,windows 服務(wù)收到操作系統(tǒng)注銷或者重啟的消息?(圖八)    Public Declare Function SetConsoleCtrlHandler()Function SetConsoleCtrlHandler Lib "kernel32.dll" Alias "SetConsoleCtrlHandler" (ByVal handlerRoutine As HandlerRoutine, ByVal add As Boolean) As Boolean 
如何讓自己的應(yīng)用程序,控制臺(tái)程序,windows 服務(wù)收到操作系統(tǒng)注銷或者重啟的消息?(圖七)如何讓自己的應(yīng)用程序,控制臺(tái)程序,windows 服務(wù)收到操作系統(tǒng)注銷或者重啟的消息?(圖八)    Public Delegate Sub HandlerRoutine()Sub HandlerRoutine(ByVal type As Integer) 
如何讓自己的應(yīng)用程序,控制臺(tái)程序,windows 服務(wù)收到操作系統(tǒng)注銷或者重啟的消息?(圖五)
如何讓自己的應(yīng)用程序,控制臺(tái)程序,windows 服務(wù)收到操作系統(tǒng)注銷或者重啟的消息?(圖七)如何讓自己的應(yīng)用程序,控制臺(tái)程序,windows 服務(wù)收到操作系統(tǒng)注銷或者重啟的消息?(圖八)    Sub Main()Sub Main()
如何讓自己的應(yīng)用程序,控制臺(tái)程序,windows 服務(wù)收到操作系統(tǒng)注銷或者重啟的消息?(圖五)
如何讓自己的應(yīng)用程序,控制臺(tái)程序,windows 服務(wù)收到操作系統(tǒng)注銷或者重啟的消息?(圖五)        SetConsoleCtrlHandler(AddressOf MyHandle, True) 
如何讓自己的應(yīng)用程序,控制臺(tái)程序,windows 服務(wù)收到操作系統(tǒng)注銷或者重啟的消息?(圖五)        Console.ReadLine() 
如何讓自己的應(yīng)用程序,控制臺(tái)程序,windows 服務(wù)收到操作系統(tǒng)注銷或者重啟的消息?(圖五)
如何讓自己的應(yīng)用程序,控制臺(tái)程序,windows 服務(wù)收到操作系統(tǒng)注銷或者重啟的消息?(圖九)    End Sub
如何讓自己的應(yīng)用程序,控制臺(tái)程序,windows 服務(wù)收到操作系統(tǒng)注銷或者重啟的消息?(圖五)
如何讓自己的應(yīng)用程序,控制臺(tái)程序,windows 服務(wù)收到操作系統(tǒng)注銷或者重啟的消息?(圖七)如何讓自己的應(yīng)用程序,控制臺(tái)程序,windows 服務(wù)收到操作系統(tǒng)注銷或者重啟的消息?(圖八)    Public Sub MyHandle()Sub MyHandle(ByVal type As Integer) 
如何讓自己的應(yīng)用程序,控制臺(tái)程序,windows 服務(wù)收到操作系統(tǒng)注銷或者重啟的消息?(圖五)        ' 控制臺(tái)收到那些消息 
如何讓自己的應(yīng)用程序,控制臺(tái)程序,windows 服務(wù)收到操作系統(tǒng)注銷或者重啟的消息?(圖五)        ' 0- CTL C 
如何讓自己的應(yīng)用程序,控制臺(tái)程序,windows 服務(wù)收到操作系統(tǒng)注銷或者重啟的消息?(圖五)        ' 1- CTL + Break 
如何讓自己的應(yīng)用程序,控制臺(tái)程序,windows 服務(wù)收到操作系統(tǒng)注銷或者重啟的消息?(圖五)        ' 2- CLOSE,可能是通過關(guān)閉close按鈕也可能是直接關(guān)閉進(jìn)程 
如何讓自己的應(yīng)用程序,控制臺(tái)程序,windows 服務(wù)收到操作系統(tǒng)注銷或者重啟的消息?(圖五)        ' 3- 操作系統(tǒng)要注銷 
如何讓自己的應(yīng)用程序,控制臺(tái)程序,windows 服務(wù)收到操作系統(tǒng)注銷或者重啟的消息?(圖五)        ' 4- 系統(tǒng)要關(guān)機(jī) 
如何讓自己的應(yīng)用程序,控制臺(tái)程序,windows 服務(wù)收到操作系統(tǒng)注銷或者重啟的消息?(圖五)
如何讓自己的應(yīng)用程序,控制臺(tái)程序,windows 服務(wù)收到操作系統(tǒng)注銷或者重啟的消息?(圖五)        'Add Your Log 
如何讓自己的應(yīng)用程序,控制臺(tái)程序,windows 服務(wù)收到操作系統(tǒng)注銷或者重啟的消息?(圖九)    End Sub 
如何讓自己的應(yīng)用程序,控制臺(tái)程序,windows 服務(wù)收到操作系統(tǒng)注銷或者重啟的消息?(圖五)
如何讓自己的應(yīng)用程序,控制臺(tái)程序,windows 服務(wù)收到操作系統(tǒng)注銷或者重啟的消息?(圖六)End Module 
如何讓自己的應(yīng)用程序,控制臺(tái)程序,windows 服務(wù)收到操作系統(tǒng)注銷或者重啟的消息?(圖一)


3.對(duì)于windows 服務(wù),api的話采取的是跟 console 類似的處理方式.只不過的他的狀態(tài)切換更多
主要是調(diào)用一個(gè) RegisterServiceCtrlHandler 的api


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 凌源市| 泽库县| 桐城市| 钟祥市| 晋宁县| 资中县| 陆川县| 台北市| 莱西市| 华安县| 阜阳市| 康定县| 宁德市| 德惠市| 葵青区| 益阳市| 蒲城县| 蕉岭县| 苏尼特左旗| 滁州市| 库车县| 乌拉特中旗| 闻喜县| 嘉禾县| 禹城市| 巴彦淖尔市| 颍上县| 江陵县| 措勤县| 福泉市| 桦川县| 鄂伦春自治旗| 右玉县| 长垣县| 康平县| 边坝县| 勃利县| 松滋市| 凤凰县| 马公市| 巴中市|