{
DWORD e = 0;
switch (CEvent)
{
case CTRL_C_EVENT:
e = CTRL_C_EVENT;
break;
case CTRL_BREAK_EVENT:
e = CTRL_BREAK_EVENT;
break;
case CTRL_CLOSE_EVENT:
e = CTRL_CLOSE_EVENT;
break;
case CTRL_LOGOFF_EVENT:
break;
case CTRL_SHUTDOWN_EVENT:
break;
}
return true;
}
{
if (SetConsoleCtrlHandler((PHANDLER_ROUTINE)ConsoleHandler, TRUE) == FALSE)
{
//安装失败
return -1;
}
GenerateConsoleCtrlEvent(CTRL_C_EVENT, 0); //手工产生一事件
}
一個Ctrl + C的信號被接收,該信號或來自鍵盤,或來自GenerateConsoleCtrlEvent 函數
CTRL_BREAK_EVENT
一個 Ctrl + Break 信號被接收,該信號或來自鍵盤,或來自GenerateConsoleCtrlEvent 函數
CTRL_CLOSE_EVENT
當用戶系統關閉Console時,系統會發送此信號到此
CTRL_LOGOFF_EVENT
當用戶退出系統時系統會發送這個信號給所有的Console程序。該信號不能顯示是哪個用戶退出。
CTRL_SHUTDOWN_EVENT
當系統將要關閉時會發送此信號到所有Console程序。
在程序中,HandlerRoutine接收到上面那些事件的時候就可以進行相應的處理或忽略該事件。
如果選擇忽略該事件,則HandlerRoutine必須返回FALSE,否則返回TRUE。
我們用SetConsoleCtrlHandler安裝HandlerRoutine時,Add參數應設爲TRUE,
想要刪除已經安裝的HandlerRoutine,請再用這個函數,只需把Add設爲FALSE即可。
另外,得用GenerateConsoleCtrlEvent函數可以産生CTRL_C_EVENT和CTRL_BREAK_EVENT事件,
利用這個函數我們就可以在我們程序中更加巧妙靈活的控制程序了。