注册控制处理函数

【勇芳软件工作室】汉化HomePreviousNext

本节显示了用于安装控制处理程序的SetConsoleCtrlHandler函数的示例。

当接收到CTRL + C信号时,控制处理程序返回TRUE,表示已处理该信号。这样做可以防止其他控件处理程序被调用。

当接收到CTRL_CLOSE_EVENT信号时,控制处理程序返回TRUE,导致系统显示一个对话框,使用户可以选择终止进程并关闭控制台或允许进程继续执行。如果用户选择不终止进程,则当进程终止时,系统关闭控制台。

当接收到CTRL + BREAK,CTRL_LOGOFF_EVENT或CTRL_SHUTDOWN_EVENT信号时,控制处理程序返回FALSE。这样做会使信号传递到下一个控制处理函数。如果没有其他控制处理程序已经注册,或者没有注册的处理程序返回TRUE,将使用默认处理程序,导致进程终止。

BOOL CtrlHandler(DWORD fdwCtrlType) {

switch(fdwCtrlType){

/ *处理CTRL + C信号。*/

case CTRL_C_EVENT:

Beep(1000, 1000);

return TRUE;

/ * CTRL + CLOSE:确认用户要退出。*/

case CTRL_CLOSE_EVENT:

return TRUE;

/ *将其他信号传递给下一个处理程序。*/

case CTRL_BREAK_EVENT:

case CTRL_LOGOFF_EVENT:

case CTRL_SHUTDOWN_EVENT:

默认:

return FALSE;

}

}

VOID main(void){

BOOL fSuccess;

fSuccess = SetConsoleCtrlHandler(

(PHANDLER_ROUTINE)CtrlHandler,/ *处理函数* /

TRUE); /* add to list */

如果(!fSuccess)

MyErrorExit("Could not set control handler");