CTRL+C 和 CTRL+BREAK 訊號
CTRL+C 和 CTRL+BREAK 按鍵組合會經由主控台程序接收特殊處理。 根據預設,當主控台視窗具有鍵盤焦點時,CTRL+C 或 CTRL+BREAK 會被視為訊號 (SIGINT 或 SIGBREAK),而不是鍵盤輸入。 根據預設,這些訊號會傳遞到已連結至主控台的所有主控台程序。 (中斷鏈接的進程不會受到影響。請參閱 建立主控台。)系統會在每個客戶端進程中建立新的線程來處理事件。 如果程序正在進行偵錯,執行緒就會引發例外狀況。 偵錯工具可以處理例外狀況,或繼續未處理的例外狀況。
CTRL+BREAK 一律會被視為訊號,但是應用程式可以使用兩種方式來變更預設的 CTRL+C 行為,以防止呼叫處理常式函式:
- SetConsoleMode 函式可以停用主控台輸入緩衝區的ENABLE_PROCESSED_INPUT輸入模式,因此 CTRL+C 會回報為鍵盤輸入,而不是做為訊號。
- 當 SetConsoleCtrlHandler 與其參數的 NULL and TRUE 值一起呼叫時,呼叫程序會忽略 CTRL+C 訊號。 正常的 CTRL+C 處理會使用 NULL 和 FALSE 值呼叫 SetConsoleCtrlHandler,藉此進行還原。 這個忽略或不忽略 CTRL+C 訊號的屬性會由子程序繼承,但是可由任何程序啟用或停用,而不會影響現有的程序。
如需有關如何處理這些訊號 (包括逾時) 的詳細資訊,請參閱處理常式回呼文件。