您的位置: 首页 >> 新闻中心 >> 计算机 >> 软件开发
使用c#捕获windows的关机事件
■ 最新课程推荐更多课程>>
学校培训课程开课时间上课地点精英价报名
正辰培训 微软软件测试工程师电话预约西直门教学区¥4704
新 科 海 软件测试工程师就业班电话预约海淀长远天地¥6280
北师大IT 软件工程与测试实战班电话预约北京师范大学¥1800
北师大IT 高级网络工程师就业班电话预约北京师范大学¥13000
金 同 方 网络工程师就业周末班电话预约人大总部¥7000

  在公司上班,下班时需要签退,而我呢隔三差五就会忘那么一次。怎么办呢,于是就想能不能捕获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惹的货;实在是不可思议。

  大家有没有什么好主意可以克服这两个缺点呢?

下一篇:关于C#静态构造函数的几点说明

  静态构造函数是C#的一个新特性,其实好像很少用到。不过当我们想初始化一些静态变量的时候就需要用到它了。这个构造函数是属于类的,而不是属于哪里实例的,就是说这个构造函数只会被执行一次。也就是在创建第一个实例或引用任何静态成员之前,由.NET自动调用。

...[查看详情]

  影视动画培训   北大BEC培训官方报名网站   2008美国夏令营启航官方指定报名网站   2008留学第一站!  
  北师大 火星时代
共举影视动画培训之鼎
  北大BEC培训官方报名网站
现在报名独享95折!
  2008年国家职业资格考试
一次过关完全备考手册
  2008留学第一站
留学资讯尽在精英留学站!
 
上一篇:2007年值得去思考的N大软件技术
下一篇:关于C#静态构造函数的几点说明
 相关新闻
·Java基础:JVM(Java 虚拟机)的详细讲解·ASP.NET实现投票结果的图片进度条显示
·Delphi 中动态链接库(dll)的建立和使用·破解网站发布系统 ASP生成静态页面方法
·为自己的ASP网站系统构建一套标记语言·基于JSP技术的网络教学平台设计
·浅析JSP开发中的对象和范围属性·经验分享:做软件测试三四年后的感想
·熊猫烧香核心源码(Delphi模仿版本)·Delphi中Hash表的使用方法
·在Delphi编程中使用C语言代码·关于Java23种设计模式的有趣见解
·理解软件保护技术之功能限制的程序·理解软件保护技术之Key File保护
·C程序实现汉字内码与GB码·关于C#静态构造函数的几点说明
 
◇ 重点栏目导航
◇ 精英服务承诺
教育顾问:010-51660910
QQ交流:138660910
相关资料
·软件测试新手的修炼之路
·Smarty简体中文参考手册
·Struts中文手册
·Struts快速学习指南
·ultradev动态网页制作教程
·UML工具箱
·《设计模式》中文版
·学友Flash伴侣 1.11
·阿须图像水印(AssureMark)V2.0
·超级语霸
相关试题
·2007年全国CPA考试试卷及答案解析之《会
·2007年CPA试卷及答案解析之《财务成本管
·2008年注会考前模拟试题之《财务成本管理
·2007年全国CPA《税法》考试试卷及答案解
·2008年中级会计职称《经济法》试题及答案
·2008年注册会计师考前模拟试题参考答案之
·2008年注册会计师考前模拟试题之《会计》
·2008年注册会计师考前模拟试题之《税法》
·2008年高校招生全国统考理数试题(四川延
·2008年全国高考物理科试题参考答案(上海
相关热贴
·如何改QQ IP地址!
·恰当选择软件测试自动化方案
·ADO.NET学习总结
·.net操纵xml文件类(c#)
·Log4net教程
·VPN技术详解
·高手必读 网络端口安全防护技巧放送
·访问XP共享出现的问题解决办法
·Web2.0时代,RSS你会用了吗?(技术实现总
·.NET下正则表达式应用的四个示例