BOOL WINAPI ConsoleHandler(DWORD CEvent)
 {
  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;
 }
 int main(int argc, char* argv[])
 {
  if  (SetConsoleCtrlHandler((PHANDLER_ROUTINE)ConsoleHandler, TRUE) == FALSE)
  {
   //安装失败
   return -1;
  }
  GenerateConsoleCtrlEvent(CTRL_C_EVENT, 0); //手工产生一事件
 }
CTRL_C_EVENT
 一個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事件,
  利用這個函數我們就可以在我們程序中更加巧妙靈活的控制程序了。