使用c#捕获windows的关机事件

window

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

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

时间: 2024-09-30 04:42:05

使用c#捕获windows的关机事件的相关文章

winform程序,如何监听关机事件?

问题描述 我做的winform程序需要监听关机事件,做一些事情.网络上搜索了一下,用的是Microsoft.Win32.SystemEvents.SessionEnding事件,我做了类似的测试程序没有成功?求解. 解决方案 解决方案二:关机有相应的windows消息.在C#里可以截获搜索protectedoverridevoidOnFormClosing解决方案三:百度.谷歌一下C#捕捉关机事件,大把的例子解决方案四:虽然通过C#提供的类库可以捕获到关机程序但是这种做法并不是最好的,我推荐你使

启用关机事件跟踪

在不少工作站和服务器系统中,Shutdown Event Tracker都是个非常实用的功能.此功能可以为用户提供系统关闭的原因,以此来分析系统遇到和存在的问题.而事实上,在Windows7中,也存在此功能,只是被隐藏了. 1. 组策略法 * WIN+R运行gpedit.msc * 依次打开 Computer Configuration (计算机配置)> Administrative Templates (管理模板)> System(系统) >RHS > Display Shutd

巧妙设置 加速Windows 2003关机速度

一.关闭关机事件跟踪程序 运行"Gpedit.msc"打开组策略窗口,然后在左侧"计算机配置"中找到 "管理模板→系统",双击右侧的"显示关闭事件跟踪程序",将其设为 "已禁用"(图1),这样关机时,那个恼人的关机事件跟踪程序窗口就不会再出现,从此可以 直接进行关机操作. 二.关闭关机审核 虽然可以直接执行关机操作,但是在关机前系统会进行很多检查,因此我们可以进行设置,让它跳过 一些不必要的检测. 在桌面空

C#捕获控制台(console)关闭事件

有时,公司内部自己开发的控制台(console)应用程序在服务器上运行会因为遇到某些异常自动关闭了,这就需要用某机制来捕获控制台(console)关闭事件,把这样写日志,便于维护和调试. 源码如下: 程序代码 Code 1using System; 2using System.Runtime.InteropServices; 3using System.Threading; 4using System.Diagnostics; 5 6namespace xmlpusher 7{ 8 public

win7系统开机提示“准备配置Windows请勿关机”怎么办?

win7系统开机提示"准备配置Windows请勿关机"怎么办?          准备工作:在进行下面操作前可以先试下 最后一次正确的配置看能不能进系统. 1.首先重新启动电脑,大家可以使用强制启动,然后按F8键,选择安全模式; 2.进入安全模式后,打开控制面板,选择"卸载"程序; 3.然后点击查看已经安装的更新选项win7; 4.根据日期找到最近安装的更新,右键点击卸载; 5.卸载完更新后,再重新启动Win7系统看能不能进入到系统.  

Windows 8关机方法汇总

  windows 8如何关机呢?似乎是个很小白的问题,但是因为windows 8失去了开始按钮,让一些习惯了用开始按钮来关机的网友有些不习惯.下面就是一些windows 8关机的汇总,有需要的朋友可以看一下. 1."Win + i" 快捷键或者借助鼠标滑至桌面右下/右上角,调出Charm菜单工具栏.点击"电源"即可看到睡眠.关机.重启选项.使用Metro界面和传统桌面. 2.快捷键"Alt + F4",调出关闭Windows窗口,适用于传统桌面

windows 8关机在哪?

  目前不少喜欢尝新鲜的电脑爱好者都安装了windows 8测试版体验一番,由于系统是全英文加上windows 关机选项隐藏神秘,不少用户都遇到了尴尬的一幕:找不到关机选项.那么windows 8关机在哪 windows 8怎么关机呢?下面编辑与大家一起分享下. windows 8 关机在哪,win8关机隐藏隐蔽 windows 8系统对开始菜单进行了精简优化,不少朋友都有点不习惯,毕竟我们以前关闭电脑都是直接可以在开始菜单中看到关机选项.但大家看下如上图所示,关机选项不只是简单的在开始里,而是

win7系统开启关机事件跟踪解决电脑不正常关机问题

  方法一. 1.运行regedit打开注册表编辑器; 2.然后依次定位展开到"HKEY_LOCAL_MACHINESOFTWAREPoliciesMicrosoftWindows NTReliability"项; 3.接着分别双击ShutdownReason和OnShutdownReasonUI这两项并将其设置键值为1,之后点击确定按钮退出即可. 方法二. 1.运行gpedit.msc打开组策略窗口; 2.在打开的窗口中,依次展开Computer Configuration (计算机

Win7开机提示“配置Windows请勿关机”怎么办?

  Win7系统开机启动时总是出现"配置Windows请勿关机"的提示,没过几秒后电脑自动重启,每次开机都这样无法进入系统,此时碰到这种现象的用户就可以使用以下5种方法解决问题. 方法一: 开机按下F8,在出现的Windows高级启动选项界面中,选择"最后一次正确配置",并按下回车键即可. 方法二: 开机按下F8后,在出现的Windows高级启动选项界面中,选择"安全模式",按下回车键,进入安全模式后重新启动计算机,再次按下F8,在Windows