C#捕获控制台(console)关闭事件
源码如下:
1using System;
2using System.Runtime.InteropServices;
3using System.Threading;
4using System.Diagnostics;
5
6namespace xmlpusher
7{
8 public delegate bool ConsoleCtrlDelegate(int dwCtrlType);
9 /**//// <summary>
10 /// Class1 的摘要说明。
11 /// </summary>
12 class Class1
13 {
14 //The SetConsoleCtrlHandler function adds or removes an application-defined HandlerRoutine function
15 //from the list of handler functions for the calling process.
16 [DllImport("kernel32.dll")]
17 private static extern bool SetConsoleCtrlHandler(ConsoleCtrlDelegate HandlerRoutine, bool Add);
18 //一個Ctrl + C的信號被接收,該信號或來自鍵盤,或來自GenerateConsoleCtrlEvent 函數
19 private const int CTRL_C_EVENT = 0;
20 //一個 Ctrl + Break 信號被接收,該信號或來自鍵盤,或來自GenerateConsoleCtrlEvent 函數
21 private const int CTRL_BREAK_EVENT = 1;
22 //當用戶系統關閉Console時,系統會發送此信號到此
23 private const int CTRL_CLOSE_EVENT = 2;
24 //當用戶退出系統時系統會發送這個信號給所有的Console程序。該信號不能顯示是哪個用戶退出。
25 private const int CTRL_LOGOFF_EVENT = 5;
26 //當系統將要關閉時會發送此信號到所有Console程序
27 private const int CTRL_SHUTDOWN_EVENT = 6;
28 /**//// <summary>
29 /// 应用程序的主入口点。
30 /// </summary>
31 [STAThread]
32 static void Main(string[] args)
33 {
34 //
35 // TODO: 在此处添加代码以启动应用程序
36 //
37 Class1 cl = new Class1();
38 }
39
40 public Class1()
41 {
42 ConsoleCtrlDelegate newDategate = new ConsoleCtrlDelegate(HandlerRoutine);
43 bool re = SetConsoleCtrlHandler(newDategate, true);
44 if (re)
45 {
46 Console.WriteLine("Set SetConsoleCtrlHandler success!!");
47 }
48 else
49 {
50 Debug.WriteLine("Set SetConsoleCtrlHandler Error!!");
51 AsReportFile.WriteFile("","test.txt","who close?");
52 }
53 Console.ReadLine();
54 }
55
56 bool HandlerRoutine(int CtrlType)
57 {
58 switch (CtrlType)
59 {
60 case CTRL_CLOSE_EVENT:
61 for (int i = 0; i < 100; i++)
62 {
63 Console.WriteLine("i is:{0}", i);
64 Thread.Sleep(1000);
65 }
66 break;
67 }
68 return false;
69 }
70 }
71}
72
73
http://www.techmango.com/blog/article.asp?id=381
转载于:https://www.cnblogs.com/plain-heart/archive/2008/04/17/1158874.html
C#捕获控制台(console)关闭事件相关推荐
- JS - 捕获打印窗口关闭事件
实际上浏览器没有标准化的打印窗口关闭事件,但是根据js单线程这一特性,我们可以在打开打印窗口时同时执行一个异步函数,这样异步函数将被阻塞直到窗口关闭,通用于任何窗口. window.print(); ...
- mfc打开控制台异常关闭_vc控制台程序关闭事件时的正确处理方式
百度可以找到很多关于这个问题解决的方法 关键控制台API函数:SetConsoleCtrlHandler 在支持C++ 11以上的编译器中,你可以这么做. SetConsoleCtrlHandler( ...
- C#控制台程序中处理2个关闭事件的代码实例
From: http://www.cnblogs.com/lvxiangjack/p/5363627.html 我们开发的控制台应用,在运行阶段很有可能被用户Ctrl+C终止或是被用户直接关闭.如果我 ...
- JavaScript捕获窗口关闭事件
JavaScript捕获窗口关闭事件 关键字: window.close事件 javascript捕获窗口关闭事件有两种方法 1.用javascript重新定义 window.onbeforeunlo ...
- react取消捕获_React中阻止事件冒泡的问题详析
前言 最近在研究react.redux等,网上找了很久都没有完整的答案,索性自己整理下,这篇文章就来给大家介绍了关于React阻止事件冒泡的相关内容,下面话不多说了,来一起看看详细的介绍吧 在正式开始 ...
- Eclipse控制台Console使用说明
1.说明 本文详细介绍Eclipse控制台Console使用说明, 调试时通过控制台查看日志, 有时候日志太多会找不到上面的日志, 有时候几个控制台会不受控制的弹出, 那么请参考本文, 通过调整Ecl ...
- VUE监听页面刷新和关闭事件
背景:公司有一个数据看板,,需求是要统计看板有多少人看过,,每个人停留的曝光时间 使用技术:目前使用的技术是 后端Springboot 权限用的是SpringSecurity,前端页面是 Vue+El ...
- 微信公众号网页中页面的关闭事件
window.addEventListener('pageshow', function () {console.log('页面加载了') });window.addEventListener('pa ...
- JS做谷歌浏览器关闭事件监听
问题:自动化录制插件开发,每次录制结束,如果直接点击关闭而不通过自动化窗口提供的按钮实现,则下一次窗口打开的时候出现错乱,步骤显示.tabid显示等问题.经过排查,窗口新开是在父级框架,同时正常点击录 ...
最新文章
- php可以做ios程序吗,php写的可以在本机发送iOS push程序
- 学会python编程容易吗-学习武汉Python编程培训容易吗?别人都是怎么学习的?
- arthas使用示例:trace追踪方法调用路径及统计方法耗时
- 硬盘结构及硬盘错误的解决方法(一)
- 【洛谷 - P3410】拍照(最大权闭合图,网络流最小割)
- 解决pip安装模块报错Cannot fetch index base URL http://pypi.python.org/simple/
- [转]EntityFramework走马观花之CRUD(中)
- 自然语言处理实践Task4
- 即将毕业的大学生,还在盲目跟风学Python吗?某位科大教授有话说
- elsevier模板_英文论文双栏模板
- 这些反病毒斗争经验,我全放这了!
- Leetcode五大常用算法
- 【毕业设计】STM32智能药箱系统 - 单片机 嵌入式 物联网
- GoLang使用sync.Once
- home为什么是地点副词_home为什么可以做副词
- 【性能测试基础】性能专有名词解析及性能瓶颈分析技巧
- MATLAB积分(一)
- 路由器开启IPv6的方法
- python画混淆矩阵 confusion matrix
- java bcd asc_BCD码和ASCII码的区别
热门文章
- 看图说话:11种用户,你如何应对?
- Kano模型在用户调研中的应用——CRM工具调研实例
- linux+npm+v+报错_linux下安装npm
- 系统学习机器学习之特征工程(二)--离散型特征编码方式:LabelEncoder、one-hot与哑变量*
- 剑指offer最新版_剑指offer第二版速查表
- 已知坐标求方位角_震惊,up主居然能默写球坐标拉普拉斯算子!
- “21天好习惯”第一期-14
- 循环链表(线性表的链式存储)---C语言版
- 2020研究生数学建模获奖名单_赞!浙商大研究生在全国研究生数学建模竞赛中喜获41个奖项...
- 协议栈Protocol stack入门