在Windows 7中捕获控制台退出C#
发布时间:2020-12-14 01:52:00 所属栏目:Windows 来源:网络整理
导读:有没有人知道如何在 Windows中的c#中的控制台中对ctrl c事件作出反应? 这个问题:Capture console exit C#说怎么做,但我已经尝试过它只捕获事件,当用户点击控制台窗口顶部的关闭X. 当用户键入ctrl c时没有任何反应,它甚至在调试时都没有命中处理程序. 谢谢
有没有人知道如何在
Windows中的c#中的控制台中对ctrl c事件作出反应?
这个问题:Capture console exit C#说怎么做,但我已经尝试过它只捕获事件,当用户点击控制台窗口顶部的关闭X. 当用户键入ctrl c时没有任何反应,它甚至在调试时都没有命中处理程序. 谢谢 这是我的代码 namespace EventCloseConsole { using System.Runtime.InteropServices; using System; class Program { [DllImport("Kernel32")] private static extern bool SetConsoleCtrlHandler(EventHandler handler,bool add); private delegate bool EventHandler(CtrlType sig); static EventHandler _handler; enum CtrlType { CTRL_C_EVENT = 0,CTRL_BREAK_EVENT = 1,CTRL_CLOSE_EVENT = 2,CTRL_LOGOFF_EVENT = 5,CTRL_SHUTDOWN_EVENT = 6 } private static bool Handler(CtrlType sig) { switch (sig) { case CtrlType.CTRL_C_EVENT: case CtrlType.CTRL_LOGOFF_EVENT: case CtrlType.CTRL_SHUTDOWN_EVENT: case CtrlType.CTRL_CLOSE_EVENT: Console.WriteLine("Closing"); System.Threading.Thread.Sleep(500); return false; default: return true; } } static void Main(string[] args) { _handler += new EventHandler(Handler); SetConsoleCtrlHandler(_handler,true); Console.ReadLine(); } } } 解决方法
这适用于Windows 7.使用x按钮关闭
秘密是变量static ConsoleEventDelegate _d private static void Main(string[] args) { ConsoleEventHooker.Closed += ConsoleEventHooker_Closed; } static void ConsoleHooker_Closed(object sender,EventArgs e) { } ConsoleEventHooker.cs namespace System { internal static class ConsoleEventHooker { private static bool _initedHooker; private static EventHandler _closed; private static EventHandler _shutdown; private static ConsoleEventDelegate _d; public static event EventHandler Closed { add { Init(); _closed += value; } remove { _closed -= value; } } public static event EventHandler Shutdown { add { Init(); _shutdown += value; } remove { _shutdown -= value; } } private static void Init() { if (_initedHooker) return; _initedHooker = true; _d = ConsoleEventCallback; SetConsoleCtrlHandler(_d,true); } private static bool ConsoleEventCallback(CtrlTypes eventType) { if (eventType == CtrlTypes.CTRL_CLOSE_EVENT) { if(_closed != null) _closed(null,new EventArgs()); } if (eventType == CtrlTypes.CTRL_SHUTDOWN_EVENT) { if (_shutdown != null) _shutdown(null,new EventArgs()); } return false; } // A delegate type to be used as the handler routine // for SetConsoleCtrlHandler. delegate bool ConsoleEventDelegate(CtrlTypes ctrlType); [DllImport("kernel32.dll",SetLastError = true)] private static extern bool SetConsoleCtrlHandler(ConsoleEventDelegate callback,bool add); } // An enumerated type for the control messages // sent to the handler routine. public enum CtrlTypes { CTRL_C_EVENT = 0,CTRL_BREAK_EVENT,CTRL_CLOSE_EVENT,CTRL_SHUTDOWN_EVENT } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 如何仅使用内置的内容(批处理脚本,资源管理器等)在Windows上
- windows-xp – 远程监控Windows框,如果发生故障则发送电子邮
- iis – 在Windows Server 2012 R2上使用SNI无法正常工作
- 遗传算法 – 带有Time Windows的TSP的交叉运算符
- 使用带有局部变量的’window’进行JavaScript中的全局访问
- windows – 如何配置StarWind Virtual SAN Free
- windows-server-2012-r2 – 如何在Windows Server 2012 R2
- windows – 任务调度程序不会终止任务
- macos – Windows上的Mac字体渲染
- 使用putty配套工具pscp实现windows向Linux传送文件[Linux]
推荐文章
站长推荐
- windows – 如何在行继续之后正确转义引用的命令
- windows类似grep的命令——findstr
- Odata压缩 – 是否有任何支持? (WinRT的WCF数据
- win10下安装PyQt4
- recv()windows socket占用无限时间 – 如何超时?
- windows-server-2008-r2 – 从ESXi 4.1中的模板部
- Windows Server 2016-DHCP增删功能介绍
- windows-7 – 从命令行删除SCCM证书
- Windows – Microsoft Web Platform Installer –
- windows-server-2008 – 可以将必要的dll文件复制
热点阅读