捕获控制台(console)关闭事件:

1.Ctrl+C信号;

2.Ctrl+Break信号;

3.用户系统关闭Console时;

4.用户退出系统时;

5.系统将要关闭时;

using System;
using System.Runtime.InteropServices;
using System.Threading;
using System.Diagnostics; namespace ConsoleApplication2
{
public delegate bool ConsoleCtrlDelegate(int dwCtrlType);
class Program
{
[DllImport("kernel32.dll")]
private static extern bool SetConsoleCtrlHandler(ConsoleCtrlDelegate handlerRoutine, bool add); private const int CtrlCEvent = ;//CTRL_C_EVENT = 0;//一个Ctrl+C的信号被接收,该信号或来自键盘,或来自GenerateConsoleCtrlEvent 函数 private const int CtrlBreakEvent = ;//CTRL_BREAK_EVENT = 1;//一个Ctrl+Break信号被接收,该信号或来自键盘,或来自GenerateConsoleCtrlEvent 函数 private const int CtrlCloseEvent = ;//CTRL_CLOSE_EVENT = 2;//当用户系统关闭Console时,系统会发送此信号到此 private const int CtrlLogoffEvent = ;//CTRL_LOGOFF_EVENT = 5;//当用户退出系统时系统会发送这个信号给所有的Console程序。该信号不能显示是哪个用户退出。 private const int CtrlShutdownEvent = ;//CTRL_SHUTDOWN_EVENT = 6;//当系统将要关闭时会发送此信号到所有Console程序
[STAThread]
static void Main(string[] args)
{
// TODO: 在此处添加代码以启动应用程序
Program cl = new Program();
} public Program()
{
if (SetConsoleCtrlHandler(new ConsoleCtrlDelegate(HandlerRoutine), true))
{
Console.WriteLine("Set SetConsoleCtrlHandler success!!");
}
else
{
Debug.WriteLine("Set SetConsoleCtrlHandler Error!!");
//AsReportFile.WriteFile("", "test.txt", "who close?");
}
Console.ReadLine(); } bool HandlerRoutine(int ctrlType)
{
Console.WriteLine("Set SetConsoleCtrlHandler success!!");
Console.WriteLine("Set SetConsoleCtrlHandler success!!");
Console.WriteLine("Set SetConsoleCtrlHandler success!!");
Console.WriteLine("Set SetConsoleCtrlHandler success!!");
Console.WriteLine("Set SetConsoleCtrlHandler success!!");
Console.WriteLine("Set SetConsoleCtrlHandler success!!");
Console.WriteLine("Set SetConsoleCtrlHandler success!!"); switch (ctrlType)
{
case CtrlCEvent: System.Console.WriteLine("Ctrl+C keydown"); break; case CtrlBreakEvent: System.Console.WriteLine("Ctrl+Break keydown"); break; case CtrlCloseEvent: System.Console.WriteLine("window closed"); break; case CtrlLogoffEvent: System.Console.WriteLine("log off or shut down"); break; case CtrlShutdownEvent: System.Console.WriteLine("system shut down"); break; default: System.Console.WriteLine(ctrlType.ToString()); break;
}
for (int i = ; i < ; i++)
{
Console.WriteLine("i is:{0}", i);
Thread.Sleep();
}
return false;
}
}
}

[No000090]C#捕获控制台(console)关闭事件及响应cmd快捷键的更多相关文章

  1. 截获控制台程序关闭事件(SetConsoleCtrlHandler)

    最近控制台程序中需要捕获控制台关闭事件,在用户关闭的时候进行某些操作,找了一大圈发现了一个方法,通过调用WIN32 API SetConsoleCtrlHandler方法来实现,具体代码如下: usi ...

  2. javascript捕获页面窗口关闭事件

    javascript捕获窗口关闭事件有两种方法 onbeforeunload()      ,onUnload() 用法有两种: 1.    function      window.onbefore ...

  3. vc控制台程序关闭事件时的正确处理方式

    百度可以找到很多关于这个问题解决的方法 关键控制台API函数:SetConsoleCtrlHandler 在支持C++ 11以上的编译器中,你可以这么做. SetConsoleCtrlHandler( ...

  4. C#处理控制台关闭事件

    应用场景 我们开发的控制台应用,在运行阶段很有可能被用户Ctrl+C终止或是被用户直接关闭.如果我们不希望用户通过Ctrl+C终止我们的程序,就需要对Ctrl+C或关闭事件作处理. 处理方法 在.ne ...

  5. C#控制台程序中处理2个关闭事件的代码实例

    我们开发的控制台应用,在运行阶段很有可能被用户Ctrl+C终止或是被用户直接关闭.如果我们不希望用户通过Ctrl+C终止我们的程序,就需要对Ctrl+C或关闭事件作处理. 处理方法 在.net平台下C ...

  6. js捕捉浏览器关闭事件-兼容几乎所有浏览器

    很多时候我们都在困扰,如何捕获浏览器关闭事件,网上虽然有很多方法,但都不理想,后来终于找到了一个很好地实现方法,大家可以试试哦,支持几乎所有的浏览器 <script type="tex ...

  7. DOM事件: DOM事件级别、DOM事件流、DOM事件模型、DOM事件捕获过程、自定义事件

    前端面试中只要问到事件,就肯定会有DOM事件:如果回答出来了,就会一直向下延申,其实这些东西都很简单,但我第一次被问到的时候,也是懵的: DOM事件级别: DOM0 element.onclick = ...

  8. Eclipse控制台Console使用说明

    1.说明 本文详细介绍Eclipse控制台Console使用说明, 调试时通过控制台查看日志, 有时候日志太多会找不到上面的日志, 有时候几个控制台会不受控制的弹出, 那么请参考本文, 通过调整Ecl ...

  9. React技巧之处理tab页关闭事件

    原文链接:https://bobbyhadz.com/blog/react-handle-tab-close-event 作者:Borislav Hadzhiev 正文从这开始~ 总览 在React中 ...

随机推荐

  1. IIS7禁用单个静态文件的缓存配置方法

    IIS7中,想将一个经常修改的静态文件设置为不可缓存,在IIS配置界面里怎么也找不到... 一番google之后在stackoverflow里边发现了这样一段回答,最终解决了问题: just stum ...

  2. position:sticky的兼容性尝试

    开篇 笔者刚刚结束淘宝的工作,现在加入了一家有青春活力的垂直电商公司,正对着阿里巴巴的西溪园区,最近一直在熟悉新的工作环境和规范,因此博客有好些时间没有更新了,在此抱歉! 在忙碌完公司的发布系统之后, ...

  3. 基于trie树的具有联想功能的文本编辑器

    之前的软件设计与开发实践课程中,自己构思的大作业题目.做的具有核心功能,但是还欠缺边边角角的小功能和持久化数据结构,先放出来,有机会一点点改.github:https://github.com/chu ...

  4. ImageSharp .NET Core跨平台图形处理库

    ImageSharp 是支持.NET Core跨平台图形处理库,ImageSharp是ImageProcessor 的.NET Core跨平台实现. ImageSharp 支持如下操作: 调整大小,裁 ...

  5. [Tool] Open Live Writer 插件更新

    最新插件下载地址:Memento.OLW_V1.0.0.2.7z 零.历史更新记录 2016.11.24 1. 修正 cnblog 语法高亮中的 SQL.Perl 语法高亮异常 下载地址:Mement ...

  6. 20个非常有用的Java程序片段

    下面是20个非常有用的Java程序片段,希望能对你有用. 1. 字符串有整型的相互转换 String a = String.valueOf(2); //integer to numeric strin ...

  7. 分金币 bzoj 3293

    分金币(1s 128M)  coin [问题描述] 圆桌上坐着n个人,每人有一定数量的金币,金币总数能被n整除.每个人可以给他左右相邻的人一些金币,最终使得每个人的金币数目相等.你的任务是求出被转手的 ...

  8. 在一个项目各个子模块中使用Maven的一些通用的准则

    1.各个子模块都应该使用相同的groupId(如:com.mvnbook.account); 2.各个子模块如果一起开发和发布,还应该使用相同的版本:version: 3.各个子模块还应该使用一致的前 ...

  9. 4.6 .net core依赖注入的封装

    现在流行的系统一般都采用依赖注入的实现方式,利用DI容器来直接获取所用到的类/接口的实例..net core也一样采用DI的方式,提供了DI容器的接口IServiceCollection,并提供了基于 ...

  10. ASP.NET中后台数据和前台控件的绑定

    关于ASP.NET中后台数据库和前台的数据控件的绑定问题 最近一直在学习个知识点,自己创建了SQL Server数据库表,想在ASP.NET中连接数据库,并把数据库中的数据显示在前台,注意,这里的数据 ...