您的位置:首页 > 其它

如何捕捉控制台程序的关闭事件

2008-05-24 15:27 323 查看
最近要做个控制台程序,在用户关闭程序的时候要做些处理,但控制台程序却没有WinForm的Closing或Closed事件,想想只能用API才捕捉消息来实现了,代码如下:


using System;


using System.Windows.Forms;


using System.Diagnostics;


using System.Runtime.InteropServices;




namespace ConsoleColsed




...{


public delegate bool ConsoleCtrlDelegate(int dwCtrlType);




public class ClsMain




...{


[DllImport("kernel32.dll")]


private static extern bool SetConsoleCtrlHandler(ConsoleCtrlDelegate HandlerRoutine, bool Add);


//当用户关闭Console时,系统会发送次消息


private const int CTRL_CLOSE_EVENT = 2;




[STAThread]


static void Main()




...{


ClsMain cls = new ClsMain();


}




public ClsMain()




...{


// 用API安装事件处理


ConsoleCtrlDelegate newDelegate = new ConsoleCtrlDelegate(HandlerRoutine);


bool bRet = SetConsoleCtrlHandler(newDelegate, true);


if (bRet == false) //安装事件处理失败




...{


Debug.WriteLine("失败");


}


else




...{


Console.WriteLine("ok");


Console.Read();


}


}




/**//// <summary>


/// 处理消息的事件


/// </summary>


private static bool HandlerRoutine(int CtrlType)




...{


switch (CtrlType)




...{


case CTRL_CLOSE_EVENT: //用户要关闭Console了


Debug.WriteLine("Close");


break;


}




return false;


}


}


}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: