控制台中屏蔽Ctrl+C快速鍵對表單的關閉功能

來源:互聯網
上載者:User

標籤:kernel32   type   響應   設定斷點   oid   tps   表單   main   退出   

匯入SetCtrlHandlerHandler API
 1 //定義處理常式委託 2 public delegate bool ConsoleCtrlDelegate(int ctrlType); 3 //匯入SetCtrlHandlerHandler API 4 [DllImport("kernel32.dll")] 5 private static extern bool SetConsoleCtrlHandler(ConsoleCtrlDelegate HandlerRoutine, bool Add); 6 //當使用者關閉Console時,系統會發送次訊息 7 private const int CTRL_CLOSE_EVENT = 2; 8 //Ctrl+C,系統會發送次訊息 9 private const int CTRL_C_EVENT = 0;10 //Ctrl+break,系統會發送次訊息11 private const int CTRL_BREAK_EVENT = 1;12 //使用者退出(登出),系統會發送次訊息13 private const int CTRL_LOGOFF_EVENT = 5;14 //系統關閉,系統會發送次訊息15 private const int CTRL_SHUTDOWN_EVENT = 6;
這是對事件處理的方法,後面SetCtrlHandlerHandler會進行調用
 1 //處理常式常式,在這裡編寫對指定事件的處理常式代碼注意:在VS中調試執行時,在這裡設定斷點,但不會中斷;會提示:無可用源 2 private static bool HandlerRoutine(int ctrlType) 3 { 4     Console.WriteLine(ctrlType); 5     switch (ctrlType) 6     { 7         case CTRL_C_EVENT: 8             Console.WriteLine("C"); 9             return true; //這裡返回true,表示阻止響應系統對該程式的操作  10                          //break;11         case CTRL_BREAK_EVENT:12             Console.WriteLine("BREAK");13             return true;14         case CTRL_CLOSE_EVENT:15             Console.WriteLine("CLOSE");16             return true;17         case CTRL_LOGOFF_EVENT:18             Console.WriteLine("LOGOFF");19             return true;20         case CTRL_SHUTDOWN_EVENT:21             Console.WriteLine("SHUTDOWN");22             return true;23     }24     //return true;//表示阻止響應系統對該程式的操作25     return false;//忽略處理,讓系統進行預設操作26 }

核心代碼是位於類的建構函式中

 1 public Program() 2 { 3     ConsoleCtrlDelegate consoleDelegete = new ConsoleCtrlDelegate(HandlerRoutine); 4     bool bRet = SetConsoleCtrlHandler(consoleDelegete, true); 5     if (bRet == false) //安裝事件處理失敗 6     { 7         Console.WriteLine("error"); 8         while (true) 9         {10             Console.WriteLine("...");11             Thread.Sleep(1000);12         }13     }14     else15     {16         Console.WriteLine("ok");17         while (true)18         {19             Console.WriteLine("...");20             Thread.Sleep(1000);21         }22     }23 }

控制台主函數入口處調用方法

1 static void Main(string[] args)2 {3     Program cls = new Program();4     //Console.ReadKey();5 }

參考:SetConsoleCtrlHandler 處理控制台訊息、SetConsoleCtrlHandler

 

 

控制台中屏蔽Ctrl+C快速鍵對表單的關閉功能

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.