• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

C# Win32控制台应用程序忽略Ctrl + C阻止程序退出的代码示例(图)

c# 搞代码 4年前 (2022-01-09) 8次浏览 已收录 0个评论

C# Win32控制台应用程序忽略 Ctrl + C,阻止程序退出,这里使用到了Windows API SetConsoleCtrlHandler函数

注意:在VS中调试执行时,在处理程序例程中设置断点,不会中断;会提示:无可用源,如下图:

完整示例代码:

using System;using System.Collections.Generic;using System.Text;using System.Diagnostics;using System.Runtime.InteropServices;using System.Threading;/************************************************************************//* CSharp_Win32控制台应用程序忽略 Ctrl + C * Powered by:testcs_dn * Blog:http://www.gaodaima.com/ *//************************************************************************/namespace CSharp_Win32控制台应用程序忽略CtrlC{    //定义处理程序委托    public delegate bool ConsoleCtrlDelegate(int ctrlType);    class Program    {        //导入SetCtrlHandlerHandler API        [DllImport("kernel32.dll")]        private static extern bool SetConsoleCtrlHandler(ConsoleCtrlDelegate HandlerRoutine, boo<span>本文来源gaodai#ma#com搞*!代#%^码网5</span>l Add);        //当用户关闭Console时,系统会发送次消息        private const int CTRL_CLOSE_EVENT = 2;        //Ctrl+C,系统会发送次消息        private const int CTRL_C_EVENT = 0;        //Ctrl+break,系统会发送次消息        private const int CTRL_BREAK_EVENT = 1;        //用户退出(注销),系统会发送次消息        private const int CTRL_LOGOFF_EVENT = 5;        //系统关闭,系统会发送次消息        private const int CTRL_SHUTDOWN_EVENT = 6;        static void Main(string[] args)        {            Program cls = new Program();            //Console.ReadKey();        }        public Program()        {            ConsoleCtrlDelegate consoleDelegete = new ConsoleCtrlDelegate(HandlerRoutine);            bool bRet = SetConsoleCtrlHandler(consoleDelegete, true);            if (bRet == false) //安装事件处理失败            {                Console.WriteLine("error");                while (true)                {                    Console.WriteLine("...");                    Thread.Sleep(1000);                }            }            else            {                Console.WriteLine("ok");                while (true)                {                    Console.WriteLine("...");                    Thread.Sleep(1000);                }            }        }        /// <summary>        /// 处理程序例程,在这里编写对指定事件的处理程序代码        /// 注意:在VS中调试执行时,在这里设置断点,但不会中断;会提示:无可用源;        /// </summary>        /// <param name="CtrlType"></param>        /// <returns></returns>        private static bool HandlerRoutine(int ctrlType)        {            switch(ctrlType)            {                case CTRL_C_EVENT:                    Console.WriteLine("C");                    return true; //这里返回true,表示阻止响应系统对该程序的操作                    //break;                case CTRL_BREAK_EVENT:                    Console.WriteLine("BREAK");                    break;                case CTRL_CLOSE_EVENT:                    Console.WriteLine("CLOSE");                    break;                case CTRL_LOGOFF_EVENT:                    Console.WriteLine("LOGOFF");                    break;                case CTRL_SHUTDOWN_EVENT:                    Console.WriteLine("SHUTDOWN");                    break;            }            //return true;//表示阻止响应系统对该程序的操作            return false;//忽略处理,让系统进行默认操作        }    }}

以上就是C# Win32控制台应用程序忽略Ctrl + C阻止程序退出的代码示例(图)的详细内容,更多请关注搞代码gaodaima其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:C# Win32控制台应用程序忽略Ctrl + C阻止程序退出的代码示例(图)
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址