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

首頁 > 編程 > .NET > 正文

使用.net下的系統事件增強應用程序

2024-07-10 12:58:44
字體:
來源:轉載
供稿:網友

商業源碼熱門下載www.html.org.cn

一般情況下,在開發應用程序的時候都很少考慮一些系統部分的變化對應用程序帶來影響,比如系統字體庫里的字體增加或減少,用戶注銷或系統關機,桌面主題變換等等。針對應用程序的不同,或多或少會造成一些影響,比如程序在運行過程中沒有退出就被用戶注銷,有可能造成數據丟失,系統字體的更改或系統時鐘的更改對程序造成界面顯示上或處理上的影響。如果需要程序有一定的健壯性,就需要在這些事件發生時做一些處理。幸運的是為實現這些功能我們不需要自己寫一些繁雜的代碼,.net fcl提供了一個類microsoft.win32.systemevents來很好的完成這項任務,在看大師charles petzold著的《microsoft c# windows 程序設計》的時候發現這個類,想必許多人都已經用過了,不過還是決定自己寫一些代碼來體驗一下。 
         打開.net framework sdk 文檔,查看systemevents的信息,它作為一個類提供了一些靜態事件,我新建一個windows 項目對一些事件進行了測試。 
在窗體構造函數中注冊一堆靜態事件, 
public form1() 
         { 
              initializecomponent(); 
              //當用戶更改顯示設置時發生。 
              systemevents.displaysettingschanged += new eventhandler(systemevents_displaysettingschanged); 
              //在偵聽系統事件的線程終止前發生。將在事件線程上調用委托。 
              systemevents.eventsthreadshutdown += new eventhandler(systemevents_eventsthreadshutdown); 
              //當用戶在系統中添加或移除字體時發生。 
              systemevents.installedfontschanged += new eventhandler(systemevents_installedfontschanged); 
              //當系統用完可用 ram 時發生。 
              systemevents.lowmemory += new eventhandler(systemevents_lowmemory); 
              //當用戶切換到使用其他調色板的應用程序時發生。 
              systemevents.palettechanged += new eventhandler(systemevents_palettechanged); 
              //當用戶掛起或繼續系統時發生。 
              systemevents.powermodechanged += new powermodechangedeventhandler(systemevents_powermodechanged); 
              //當用戶注銷或關閉系統時發生。 
              systemevents.sessionended += new sessionendedeventhandler(systemevents_sessionended); 
              //當用戶試圖注銷或關閉系統時發生。 
              systemevents.sessionending += new sessionendingeventhandler(systemevents_sessionending); 
              //當用戶更改系統時鐘上的時間時發生。 
              systemevents.timechanged += new eventhandler(systemevents_timechanged); 
              //在窗口計時器間隔過期時發生。 
              systemevents.timerelapsed += new timerelapsedeventhandler(systemevents_timerelapsed); 
              //在用戶首選項更改后發生。 
              systemevents.userpreferencechanged += new userpreferencechangedeventhandler(systemevents_userpreferencechanged); 
              //當用戶首選項更改時發生。 
              systemevents.userpreferencechanging += new userpreferencechangingeventhandler(systemevents_userpreferencechanging); 
         } 
上面的代碼很清楚也很簡單,對其中幾個事件處理程序的測試如下, 
         private void systemevents_userpreferencechanging(object sender, userpreferencechangingeventargs e) 
         { 
              userpreferencecategory category = e.category; 
              messagebox.show(category.tostring()); 
         } 
userpreferencecategory是一個枚舉類型,每一項值表示標識已更改的用戶首選項區域,類型比較多,具體可以看msdn文檔,userpreferencechanged事件類似,使用userpreferencechangedeventargs參數。 
下面是系統注銷或關閉事件處理程序, 
private void systemevents_sessionending(object sender, sessionendingeventargs e) 
         { 
              if(messagebox.show(this,"是否允許系統注銷!","系統提示",messageboxbuttons.yesno) != dialogresult.yes) 
              { 
                   e.cancel = true; 
              } 
              else 
              { 
                   e.cancel = false; 
              } 
              sessionendreasons reason = e.reason; 
              switch(reason) 
              { 
                   case sessionendreasons.logoff: 
                       messagebox.show("用戶正在注銷。操作系統繼續運行,但啟動此應用程序的用戶正在注銷。"); 
                       break; 
                   case sessionendreasons.systemshutdown: 
                       messagebox.show("操作系統正在關閉。"); 
                       break; 
              } 
         } 
如果把上面的事件處理程序修改成如下 
private void systemevents_sessionending(object sender, sessionendingeventargs e) 
         { 
              e.cancel = true;            
         } 
那會出現什么情況,你點擊開始菜單關機選擇注銷、關機、或重新啟動將會失效,電腦不能正常關機了,進一步的話把程序做成windows服務,人不知鬼不覺,暈,惡作劇? 
sessionended事件同上,事件參數類為sessionendedeventargs,同sessionendingeventargs相比少了cancel屬性,cancel屬性同一些windows下的某些事件差不多,比如form.closing事件,control.validating事件。 
     補充,如果需要獲取應用程序需要的系統信息,可以訪問system.windows.forms.systeminformation類,這也是一個很有用的類,它提供了一組靜態屬性。 
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 普洱| 洞口县| 泗水县| 江安县| 密云县| 达州市| 洛川县| 和林格尔县| 佛坪县| 秀山| 库车县| 泽库县| 兴文县| 长丰县| 北川| 资中县| 靖远县| 延津县| 霍林郭勒市| 通渭县| 诏安县| 乌什县| 乌苏市| 迭部县| 武山县| 盐亭县| 聂荣县| 大邑县| 中牟县| 南通市| 东至县| 彭阳县| 宣武区| 上栗县| 丽江市| 安新县| 永州市| 安陆市| 陆丰市| 共和县| 汤阴县|