转:http://developer.51cto.com/art/200509/3401.htm
一般情况下,在开发应用程序的时候都很少考虑一些系统部分的变化对应用程序带来影响,比如系统字体库里的字体增加或减少,用户注销或系统关机,桌面主题变换等等。
针对应用程序的不同,或多或少会造成一些影响,比如程序在运行过程中没有退出就被用户注销,有可能造成数据丢失,系统字体的更改或系统时钟的更改对程序造成界面显示上或处理上的影响。如果需要程序有一定的健壮性,就需要在这些事件发生时做一些处理。幸运的是为实现这些功能我们不需要自己写一些繁杂的代码,.net FCL提供了一个类Microsoft.Win32.SystemEvents来很好的完成这项任务,在看大师Charles Petzold著的《Microsoft C# Windows 程序设计》的时候发现这个类,想必许多人都已经用过了,不过还是决定自己写一些代码来体验一下。
打开.NET Framework SDK 文档,查看SystemEvents的信息,它作为一个类提供了一些静态事件,我新建一个Windows 项目对一些事件进行了测试。
在窗体构造函数中注册一堆静态事件,








































































那会出现什么情况,你点击开始菜单关机选择注销、关机、或重新启动将会失效,电脑不能正常关机了,进一步的话把程序做成Windows服务?
SessionEnded事件同上,事件参数类为SessionEndedEventArgs,同SessionEndingEventArgs相比少了Cancel属性,Cancel属性同一些windows下的某些事件差不多,比如Form.Closing事件,Control.Validating事件。
补充,如果需要获取应用程序需要的系统信息,可以访问System.Windows.Forms.SystemInformation类,这也是一个很有用的类,它提供了一组静态属性。