• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

控制台——屏蔽Ctrl+C快捷键对窗体的关闭功能

原作者: [db:作者] 来自: [db:来源] 收藏 邀请
导入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 }

参考:SetConsoleCtrlHandler 处理控制台消息SetConsoleCtrlHandler

 

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
读陈浩的《C语言结构体里的成员数组和指针》总结,零长度数组 ...发布时间:2022-07-13
下一篇:
C#中ToString格式大全发布时间:2022-07-13
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap