控制台中屏蔽Ctrl+C快捷键对窗体的关闭功能
2021-05-06 09:26
标签:kernel32 type 响应 设置断点 oid tps 窗体 main 退出 核心代码是位于类的构造函数中 控制台主函数入口处调用方法 参考:SetConsoleCtrlHandler 处理控制台消息、SetConsoleCtrlHandler 控制台中屏蔽Ctrl+C快捷键对窗体的关闭功能 标签:kernel32 type 响应 设置断点 oid tps 窗体 main 退出 原文地址:http://www.cnblogs.com/wuqiuxue/p/7669061.html导入SetCtrlHandlerHandler API
1 //定义处理程序委托
2 public delegate bool ConsoleCtrlDelegate(int ctrlType);
3 //导入SetCtrlHandlerHandler API
4 [DllImport("kernel32.dll")]
5 private static extern bool SetConsoleCtrlHandler(ConsoleCtrlDelegate HandlerRoutine, bool Add);
6 //当用户关闭Console时,系统会发送次消息
7 private const int CTRL_CLOSE_EVENT = 2;
8 //Ctrl+C,系统会发送次消息
9 private const int CTRL_C_EVENT = 0;
10 //Ctrl+break,系统会发送次消息
11 private const int CTRL_BREAK_EVENT = 1;
12 //用户退出(注销),系统会发送次消息
13 private const int CTRL_LOGOFF_EVENT = 5;
14 //系统关闭,系统会发送次消息
15 private const int CTRL_SHUTDOWN_EVENT = 6;
这是对事件处理的方法,后面SetCtrlHandlerHandler会进行调用
1 //处理程序例程,在这里编写对指定事件的处理程序代码注意:在VS中调试执行时,在这里设置断点,但不会中断;会提示:无可用源
2 private static bool HandlerRoutine(int ctrlType)
3 {
4 Console.WriteLine(ctrlType);
5 switch (ctrlType)
6 {
7 case CTRL_C_EVENT:
8 Console.WriteLine("C");
9 return true; //这里返回true,表示阻止响应系统对该程序的操作
10 //break;
11 case CTRL_BREAK_EVENT:
12 Console.WriteLine("BREAK");
13 return true;
14 case CTRL_CLOSE_EVENT:
15 Console.WriteLine("CLOSE");
16 return true;
17 case CTRL_LOGOFF_EVENT:
18 Console.WriteLine("LOGOFF");
19 return true;
20 case CTRL_SHUTDOWN_EVENT:
21 Console.WriteLine("SHUTDOWN");
22 return true;
23 }
24 //return true;//表示阻止响应系统对该程序的操作
25 return false;//忽略处理,让系统进行默认操作
26 }
1 public Program()
2 {
3 ConsoleCtrlDelegate consoleDelegete = new ConsoleCtrlDelegate(HandlerRoutine);
4 bool bRet = SetConsoleCtrlHandler(consoleDelegete, true);
5 if (bRet == false) //安装事件处理失败
6 {
7 Console.WriteLine("error");
8 while (true)
9 {
10 Console.WriteLine("...");
11 Thread.Sleep(1000);
12 }
13 }
14 else
15 {
16 Console.WriteLine("ok");
17 while (true)
18 {
19 Console.WriteLine("...");
20 Thread.Sleep(1000);
21 }
22 }
23 }
1 static void Main(string[] args)
2 {
3 Program cls = new Program();
4 //Console.ReadKey();
5 }
上一篇:入职两个月,WPF开发感想
下一篇:C# log4net相关配置说明
文章标题:控制台中屏蔽Ctrl+C快捷键对窗体的关闭功能
文章链接:http://soscw.com/index.php/essay/83141.html