国产探花免费观看_亚洲丰满少妇自慰呻吟_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惹的貨;實在是不可思議。

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 腾冲县| 阜宁县| 和龙市| 长兴县| 新沂市| 利津县| 额济纳旗| 古交市| 贵州省| 喀喇| 澳门| 桦甸市| 太仓市| 瑞金市| 泸州市| 富民县| 达尔| 双峰县| 唐河县| 桃园市| 浮梁县| 遵化市| 海盐县| 沁阳市| 柘荣县| 平武县| 桐柏县| 华宁县| 普定县| 酒泉市| 文成县| 常熟市| 城市| 正安县| 将乐县| 阿拉善左旗| 曲阳县| 鸡东县| 鹤壁市| 南溪县| 贵阳市|