C# C#实现控制台退出控制

C#实现控制台退出控制 收藏
  using System;
using System.Runtime.InteropServices;
using System.Threading;
using System.Diagnostics;

namespace ConsoleApplication3
...{
    public delegate bool ConsoleCtrlDelegate(int dwCtrlType);
    /**      
    ///    Class1    的摘要说明。  
    ///   
  
    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;
        /**      
        ///    应用程序的主入口点。  
        ///   
  
        [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;
        }
    }
}


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/pojianbing/archive/2008/03/31/2234138.aspx

你可能感兴趣的:(c#)