[No000090]C#捕獲控制台(console)關閉事件及響應cmd快捷鍵


捕獲控制台(console)關閉事件:

1.Ctrl+C信號;

2.Ctrl+Break信號;

3.用戶系統關閉Console時;

4.用戶退出系統時;

5.系統將要關閉時;

using System;
using System.Runtime.InteropServices;
using System.Threading;
using System.Diagnostics;

namespace ConsoleApplication2
{
    public delegate bool ConsoleCtrlDelegate(int dwCtrlType);
    class Program
    {
        [DllImport("kernel32.dll")]
        private static extern bool SetConsoleCtrlHandler(ConsoleCtrlDelegate handlerRoutine, bool add);

        private const int CtrlCEvent = 0;//CTRL_C_EVENT = 0;//一個Ctrl+C的信號被接收,該信號或來自鍵盤,或來自GenerateConsoleCtrlEvent    函數   

        private const int CtrlBreakEvent = 1;//CTRL_BREAK_EVENT = 1;//一個Ctrl+Break信號被接收,該信號或來自鍵盤,或來自GenerateConsoleCtrlEvent    函數  

        private const int CtrlCloseEvent = 2;//CTRL_CLOSE_EVENT = 2;//當用戶系統關閉Console時,系統會發送此信號到此   

        private const int CtrlLogoffEvent = 5;//CTRL_LOGOFF_EVENT = 5;//當用戶退出系統時系統會發送這個信號給所有的Console程序。該信號不能顯示是哪個用戶退出。   

        private const int CtrlShutdownEvent = 6;//CTRL_SHUTDOWN_EVENT = 6;//當系統將要關閉時會發送此信號到所有Console程序   
        [STAThread]
        static void Main(string[] args)
        {
            //    TODO:    在此處添加代碼以啟動應用程序   
            Program cl = new Program();
        }

        public Program()
        {
            if (SetConsoleCtrlHandler(new ConsoleCtrlDelegate(HandlerRoutine), true))
            {
                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 CtrlCEvent: System.Console.WriteLine("Ctrl+C keydown"); break;

                case CtrlBreakEvent: System.Console.WriteLine("Ctrl+Break keydown"); break;

                case CtrlCloseEvent: System.Console.WriteLine("window closed"); break;

                case CtrlLogoffEvent: System.Console.WriteLine("log off or shut down"); break;

                case CtrlShutdownEvent: System.Console.WriteLine("system shut down"); break;

                default: System.Console.WriteLine(ctrlType.ToString()); break;
            }
            for (int i = 0; i < 10; i++)
            {
                Console.WriteLine("i    is:{0}", i);
                Thread.Sleep(1000);
            }
            return false;
        }
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM