C#捕获windows关机事件,在系统关机前做一些自己想做的事
C#捕获windows关机事件,在系统关机前做一些自己想做的事;
有些时候我们可能想在Windows关机时记录或处理一些事情,这里提供几种方法。
方法一:
/// <summary>/// 窗口过程的回调函数/// </summary>/// <param name="m"></param>protected override void WndProc(ref Message m){switch (m.Msg){//此消息在OnFormClosing之前case WindowsMessage.WM_QUERYENDSESSION://MessageBox.Show("WndProc.WM_QUERYENDSESSION.我要阻止系统关闭!");//this.Close();//this.Dispose();//Application.Exit();m.Result = (IntPtr)1; //阻止Windows注销、关机或重启break;default:break;}base.WndProc(ref m);}
方法二:
protected override void OnFormClosing(FormClosingEventArgs e){switch (e.CloseReason){case CloseReason.ApplicationExitCall:e.Cancel = true;MessageBox.Show("拦截关闭要求事件!");break;case CloseReason.FormOwnerClosing:e.Cancel = true;MessageBox.Show("拦截自身关闭事件!");break;case CloseReason.MdiFormClosing:e.Cancel = true;MessageBox.Show("拦截MDI窗体关闭事件!");break;case CloseReason.None:break;case CloseReason.TaskManagerClosing:e.Cancel = true;MessageBox.Show("拦截任务管理器关闭事件!");break;case CloseReason.UserClosing://注销或关机会触发此事件;//MessageBox.Show("拦截用户关闭事件!");e.Cancel = false;break;case CloseReason.WindowsShutDown:e.Cancel = true;MessageBox.Show("拦截关机事件!");break;default:break;}base.OnFormClosing(e);}
方法三:
//当用户试图注销或关闭系统时发生。 SystemEvents.SessionEnding += new SessionEndingEventHandler(SystemEvents_SessionEnding);//下面是系统注销或关闭事件处理程序, 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类,这也是一个很有用的类,它提供了一组静态属性。
但在调试时并没有执行到这里!
C#捕获windows关机事件,在系统关机前做一些自己想做的事相关推荐
- 关闭服务器系统关机事件,让Win10关机时显示“关闭事件跟踪程序”(选择关机原因)...
使用过Windows Server服务器的童鞋,应该都知道,在关机或重启时会弹出"关机原因"对话框,选择关机原因后,才能继续关机操作,这就是"关闭事件跟踪程序" ...
- Windows 7下阻止系统关机
从Vista开始,想阻止系统关机就开始变麻烦了,不能只拦截WM_QUERYENDSESSION了,操作系统只给一个应用程序两秒钟的时间去保存自己的东西,两秒钟之后,不管做完了没有,Game Over! ...
- android 关机功能,Android系统关机或重启的几种实现方式
前阵子工作上遇到一些关于Android系统关机或重启的系统修改,于是,做了一些尝试,也搜集了一下资料,现在整理一下,做一些总结,方便学习或者日后工作的需要. 默认的SDK并没有提供应用开发者直接的An ...
- 服务器安装Windows Server + Ubuntu双系统
说明: 服务器安装双系统的意义不大,感觉工作站更适合吧.应客户要求,本文以Dell PowerEdge R740为例,简要介绍下如何在服务器上安装Windows Server+Ubuntu双系统. 操 ...
- 在Closing事件中,将e.Cancle设置成true,则Windows无法关机和重启系统的解决办法
最近在设计一个WinForm程序的时候遇到一个bug,就是From1窗体的关闭事件中设置了e.Cancle设置成true,导致系统无法关机重启,windows7 和windows xp都是这样. 我这 ...
- 服务器系统意外关机 id41,Windows内核事件ID 41.系统已重新启动,无需首先关闭 | MOS86...
单击此处可以修复Windows错误并提高系统性能Windows内核事件ID 41是在Windows 7和Windows Server 2008上的事件查看器中现在发现的一个常见错误.微软最近发表了一篇 ...
- win10系统5小时休眠—windows日志查看 判断非法关机
win10系统5小时休眠-windows日志查看 判断非法关机 1 分析 2 操作 3 日志介绍 参考 1 分析 自己设置从不休眠模式,还是进入了休眠模式,原因是电源不稳定或者是散热的问题或者是设置不 ...
- Windows Server 2003 禁止关机事件跟踪
关机事件跟踪(Shutdown Event Tracker)也是Windows server 2003区别于其他工作站系统的一个设置,对于服务器来说这是一个必要的选择,但是对于工作站系统却没什 ...
- php控制windows系统关机,window_winXP系统设置一键关机的两种方法,windows系统关机需要三步,对我 - phpStudy...
winXP系统设置一键关机的两种方法 windows系统关机需要三步,对我这样的懒人来说实在不方便.在网络上寻找了许多方法,最后用了一个.现在介绍给有需要的人.关机方法是鼠标一点关机或热键关机. 创建 ...
最新文章
- 《自然语言处理入门》不是 NLP 学习路上的万能药
- Linux负载均衡软件LVS
- windows下 Qt 静态编译
- 使用 MarkDown DocFX 升级 Rafy 帮助文档
- 怎么确保网站的可用性
- httpclient4 中文版帮助文档,最新官方版翻译版(第一章 上)
- linux设备驱动归纳总结(五):3.操作硬件——IO静态映射【转】
- leetcode1047. 删除字符串中的所有相邻重复项
- netcore docker_让.NetCore程序跑在任何有docker的地方
- bios设置 联想m8000t_Ideapad 700-17笔记本使用bios设置u盘启动方法介绍【图文详解】...
- 转:MSSQL SERVER行转列 列转行
- CodeForces615A-Bulbs-模拟
- 混沌理论物理学用科学中视角看未来、现实、时间​​​​​​​
- 移动互联网之路——Axure RP 8.0网站与APP原型设计从入门到精通
- 调平均律依据拍音来判断准确性的理论简析
- 通过函数seaborn.cubehelix_palette生成顺序调色板
- 涂鸦 opengl简单应用1
- 14届蓝桥杯Python总结
- 使用hapi 要具备什么知识
- macOS上使用Openconnect代替Cisco Anyconnect