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

首頁 > 開發 > 綜合 > 正文

使用c#捕獲windows的關機事件

2024-07-21 02:28:11
字體:
來源:轉載
供稿:網友

  在公司上班,下班時需要簽退,而我呢隔三差五就會忘那么一次。怎么辦呢,于是就想能不能捕獲windows的關機事件,做一個程序讓它在關機的時候提醒我一下呢。

  非常幸運很容易就找到了microsoft.win32命名空間下面的systemevents類,他有一個靜態的事件sessionending在系統注銷或者關機時發生,此事件只有在winform的程序下有效,而在控制臺程序下面無效,不能激發事件;還有一點我們必須在程序推出時將加上的事件移除掉,否則就容易造成內存溢出。

  關鍵代碼如下:

  using system;
  using system.collections.generic;
  using system.windows.forms;
  using microsoft.win32;
  namespace shutdown
  {
  static class program
  {
  /**////
  /// 應用程序的主入口點。
  ///
  [stathread]
  static void main()
  {
  application.enablevisualstyles();
  application.setcompatibletextrenderingdefault(false);
  formshutdown formshutdown = new formshutdown();
  systemevents.sessionending += new sessionendingeventhandler(formshutdown.systemevents_sessionending);
  application.run(formshutdown);
  }
  }
  }form 的代碼:
  using system;
  using system.collections.generic;
  using system.componentmodel;
  using system.data;
  using system.drawing;
  using system.text;
  using system.windows.forms;
  using microsoft.win32;
  namespace shutdown
  {
  public partial class formshutdown : form
  {
  const string message_txt = "您簽退了嗎?";
  const string message_title = "提示";
  public formshutdown()
  {
  initializecomponent();
  }
  internal void systemevents_sessionending(object sender, sessionendingeventargs e)
  {
  dialogresult result = messagebox.show(message_txt, message_title, messageboxbuttons.yesno);
  e.cancel = (result == dialogresult.no);
  }
  private void formshutdown_load(object sender, eventargs e)
  {
  this.location = new point(screen.primaryscreen.workingarea.width - 200, 0);
  }
  protected override void onclosed(eventargs e)
  {
  systemevents.sessionending -= new sessionendingeventhandler(this.systemevents_sessionending);
  base.onclosed(e);
  }
  }
  }

  此程序在使用c#2.0在windows2003下測試通過。大家在使用systemevents.sessionending事件時切記要在程序退出時移除事件。

  不過有兩點遺憾之處:

  1. 使用這種方式不能捕獲休眠時的事件

  2. 這個程序占用的內存太多了,只有這么一個小功能居然占了12m的內存,這都是.net framework惹的貨;實在是不可思議。

  大家有沒有什么好主意可以克服這兩個缺點呢?

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 淳安县| 托克逊县| 安国市| 望谟县| 中阳县| 平邑县| 凌源市| 沙湾县| 麦盖提县| 西畴县| 伊宁县| 海阳市| 宜丰县| 泰兴市| 故城县| 延长县| 天全县| 常山县| 柳林县| 隆安县| 辽源市| 会宁县| 博湖县| 永康市| 岐山县| 溧水县| 奈曼旗| 无锡市| 金湖县| 崇仁县| 德庆县| 新化县| 宁强县| 东辽县| 合川市| 绥棱县| 郑州市| 烟台市| 云安县| 聊城市| 郧西县|