using System; using System.Runtime.InteropServices; using System.Threading; using System.Diagnostics; namespace ConsoleApplication3 ... { public delegate bool ConsoleCtrlDelegate(int dwCtrlType); /**//// <summary> /// Class1 的摘要说明。 /// </summary> class Class1 ...{ [DllImport("kernel32.dll")] private static extern bool SetConsoleCtrlHandler(ConsoleCtrlDelegate HandlerRoutine, bool Add); //一個Ctrl + C的信號被接收,該信號或來自鍵盤,或來自GenerateConsoleCtrlEvent 函數 private const int CTRL_C_EVENT = 0; //一個 Ctrl + Break 信號被接收,該信號或來自鍵盤,或來自GenerateConsoleCtrlEvent 函數 private const int CTRL_BREAK_EVENT = 1; //當用戶系統關閉Console時,系統會發送此信號到此 private const int CTRL_CLOSE_EVENT = 2; //當用戶退出系統時系統會發送這個信號給所有的Console程序。該信號不能顯示是哪個用戶退出。 private const int CTRL_LOGOFF_EVENT = 5; //當系統將要關閉時會發送此信號到所有Console程序 private const int CTRL_SHUTDOWN_EVENT = 6; /**//// <summary> /// 应用程序的主入口点。 /// </summary> [STAThread] static void Main(string[] args) ...{ // // TODO: 在此处添加代码以启动应用程序 // Class1 cl = new Class1(); } public Class1() ...{ ConsoleCtrlDelegate newDategate = new ConsoleCtrlDelegate(HandlerRoutine); bool re = SetConsoleCtrlHandler(newDategate, true); if (re) ...{ Console.WriteLine("Set SetConsoleCtrlHandler success!!"); } else ...{ Debug.WriteLine("Set SetConsoleCtrlHandler Error!!"); //AsReportFile.WriteFile("", "test.txt", "who close?"); } Console.ReadLine(); } bool HandlerRoutine(int CtrlType) ...{ Console.WriteLine("Set SetConsoleCtrlHandler success!!"); Console.WriteLine("Set SetConsoleCtrlHandler success!!"); Console.WriteLine("Set SetConsoleCtrlHandler success!!"); Console.WriteLine("Set SetConsoleCtrlHandler success!!"); Console.WriteLine("Set SetConsoleCtrlHandler success!!"); Console.WriteLine("Set SetConsoleCtrlHandler success!!"); Console.WriteLine("Set SetConsoleCtrlHandler success!!"); switch (CtrlType) ...{ case CTRL_CLOSE_EVENT: for (int i = 0; i < 100; i++) ...{ Console.WriteLine("i is:{0}", i); Thread.Sleep(1000); } break; } return false; } }}