CTRL + C和CTRL + BREAK组合键通过控制台进程进行特殊处理。默认情况下,当控制台窗口具有键盘焦点时,CTRL + C或CTRL + BREAK被视为信号(SIGINT或SIGBREAK),而不是键盘输入。默认情况下,这些信号被传递到连接到控制台的所有控制台进程,导致系统调用控制处理函数或与这些进程相关联的函数。独立进程(以DETACHED_PROCESS或CREATE_NEW_CONSOLE标志开始的GUI进程或控制台进程)不受影响。
CTRL + BREAK始终被视为信号,但应用程序可以通过两种方式更改默认的CTRL + C行为,从而阻止调用处理函数:
* SetConsoleMode功能可以禁用控制台输入缓冲区的ENABLE_PROCESSED_INPUT输入模式,因此CTRL + C被报告为键盘输入而不是信号。
*当SetConsoleCtrlHandler调用NULL和TRUE参数值时,调用进程将忽略CTRL + C信号。通过使用NULL和FALSE值调用SetConsoleCtrlHandler来恢复正常的CTRL + C处理。忽略或不忽略CTRL + C信号的属性由子进程继承,但可以由任何进程启用或禁用,而不影响现有进程。