分享
 
 
 

使用.net下的系统事件增强应用程序

王朝c#·作者佚名  2008-05-19
窄屏简体版  字體: |||超大  

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

打开.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类,这也是一个很有用的类,它提供了一组静态属性。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有