上一篇:.Net项目制作安装程序 >>
使用.net下的系统事件增强应用程序
打开.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类,这也是一个很有用的类,它提供了一组静态属性。
下一篇:Dotnet总结(4)--xml读写 >>
相关文章:
- · .net中xmlhttp下载文件的方法参考
- · .net Compact Flamework中MD5CryptoServiceProvider的实现
- · 把.NET程序部署到没有安装.NET Framwork的机器上
- · 在.NET下编写中文代码程序
- · ADO 与ADO.NET
- · C#异步数据接收串口操作类
- · 用 .NET 开发的轻量级 UI 测试自动化
- · .net下开发COM+组件
- · 深入理解.NET 的JIT编译方式
- · .Net配置文件常用配置说明
- · 完整的在.net后台执行javascript脚本集合
- · .net手机软件开发(六)OBEX应用——文件传输部分
- · .net手机软件开发(5)——OBEX介绍
- · .NET Framework General Reference - Capitalization Styles
- · Framework 类库的事件编程
- · .net下模拟不同身份登陆以获取不同权限
- · .Net 缓存代理类 的初步考虑.
- · 把.NET程序部署到没有安装.NET Framwork的机器上
- · .NET Remoting编程简介
- · 基于.Net Framework的N层分布式应用开发
- · 使用.NET实现视频播放
- · 基于.Net Framework的N层分布式应用开发
- · .NET 程序,调用其它程序
- · 在.net开发中几个重要的认识误区(1)
- · 关于.net下服务安装
- · .NET的自动序列号工具
- · ADO.NET学习笔记(一)
- · .Net配置log4net
- · 一个经典的ADO.NET入门例子
- · 在.net使用代理浏览网页
- · .net 有关多态性的学习笔记。
- · 在.net中读写INI文件
- · 学习笔记《.NET框架程序设计(修订版)》--第三章 共享程序集 (3)
- · MyCollege.Net系统规划与总体设计
- · 学习笔记《.NET框架程序设计(修订版)》--第三章 共享程序集 (2)
- · Metadata and Reflection in .NET
- · 在.net执行sql脚本的简单实现
- · .Net下WebMethod属性
