首页 后端开发 C#.Net教程 C#捕获windows关机事件,在系统关机前做一些自己想做的事的示例代码

C#捕获windows关机事件,在系统关机前做一些自己想做的事的示例代码

Mar 11, 2017 pm 01:41 PM

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关机事件,在系统关机前做一些自己想做的事的示例代码的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

<🎜>:泡泡胶模拟器无穷大 - 如何获取和使用皇家钥匙
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系统,解释
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆树的耳语 - 如何解锁抓钩
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Java教程
1671
14
CakePHP 教程
1428
52
Laravel 教程
1331
25
PHP教程
1276
29
C# 教程
1256
24
C#与C:历史,进化和未来前景 C#与C:历史,进化和未来前景 Apr 19, 2025 am 12:07 AM

C#和C 的历史与演变各有特色,未来前景也不同。1.C 由BjarneStroustrup在1983年发明,旨在将面向对象编程引入C语言,其演变历程包括多次标准化,如C 11引入auto关键字和lambda表达式,C 20引入概念和协程,未来将专注于性能和系统级编程。2.C#由微软在2000年发布,结合C 和Java的优点,其演变注重简洁性和生产力,如C#2.0引入泛型,C#5.0引入异步编程,未来将专注于开发者的生产力和云计算。

vs code 可以在 Windows 8 中运行吗 vs code 可以在 Windows 8 中运行吗 Apr 15, 2025 pm 07:24 PM

VS Code可以在Windows 8上运行,但体验可能不佳。首先确保系统已更新到最新补丁,然后下载与系统架构匹配的VS Code安装包,按照提示安装。安装后,注意某些扩展程序可能与Windows 8不兼容,需要寻找替代扩展或在虚拟机中使用更新的Windows系统。安装必要的扩展,检查是否正常工作。尽管VS Code在Windows 8上可行,但建议升级到更新的Windows系统以获得更好的开发体验和安全保障。

sublime写好代码后如何运行 sublime写好代码后如何运行 Apr 16, 2025 am 08:51 AM

在 Sublime 中运行代码的方法有六种:通过热键、菜单、构建系统、命令行、设置默认构建系统和自定义构建命令,并可通过右键单击项目/文件运行单个文件/项目,构建系统可用性取决于 Sublime Text 的安装情况。

如何解决Laravel中复杂的BelongsToThrough关系问题?使用Composer可以! 如何解决Laravel中复杂的BelongsToThrough关系问题?使用Composer可以! Apr 17, 2025 pm 09:54 PM

在Laravel开发中,处理复杂的模型关系一直是个挑战,特别是当涉及到多层级的BelongsToThrough关系时。最近,我在处理一个多级模型关系的项目中遇到了这个问题,传统的HasManyThrough关系无法满足需求,导致数据查询变得复杂且低效。经过一番探索,我找到了staudenmeir/belongs-to-through这个库,它通过Composer轻松安装并解决了我的困扰。

laravel安装代码 laravel安装代码 Apr 18, 2025 pm 12:30 PM

要安装 Laravel,需依序进行以下步骤:安装 Composer(适用于 macOS/Linux 和 Windows)安装 Laravel 安装器创建新项目启动服务访问应用程序(网址:http://127.0.0.1:8000)设置数据库连接(如果需要)

git软件安装 git软件安装 Apr 17, 2025 am 11:57 AM

安装 Git 软件包括以下步骤:下载安装包运行安装包验证安装配置 Git安装 Git Bash(仅限 Windows)

c#.net的持续相关性:查看当前用法 c#.net的持续相关性:查看当前用法 Apr 16, 2025 am 12:07 AM

C#.NET依然重要,因为它提供了强大的工具和库,支持多种应用开发。1)C#结合.NET框架,使开发高效便捷。2)C#的类型安全和垃圾回收机制增强了其优势。3).NET提供跨平台运行环境和丰富的API,提升了开发灵活性。

vscode 可以用于 mac 吗 vscode 可以用于 mac 吗 Apr 15, 2025 pm 07:36 PM

VS Code 可以在 Mac 上使用。它具有强大的扩展功能、Git 集成、终端和调试器,同时还提供了丰富的设置选项。但是,对于特别大型项目或专业性较强的开发,VS Code 可能会有性能或功能限制。

See all articles