home *** CD-ROM | disk | FTP | other *** search
/ Programming Win32 Under the API / ProgrammingWin32UnderTheApiPatVillani.iso / Chapter4 / 4-7 / Event.c next >
C/C++ Source or Header  |  2000-07-17  |  1KB  |  73 lines

  1.  
  2. #include <windows.h>
  3.  
  4. BOOL bCtrlC = FALSE, bCtrlBrk = FALSE;
  5.  
  6. BOOL CtrlHandler(ULONG CtrlType);
  7. int ConsPuts(char *pszString);
  8.  
  9.  
  10. //
  11. // ConsPuts:
  12. //    Print a string to StdOut on the console
  13. //
  14. int ConsPuts(char *pszString)
  15. {
  16.     DWORD nLen = strlen(pszString);
  17.     DWORD nWritten;
  18.     HANDLE hOutput = GetStdHandle(STD_OUTPUT_HANDLE);
  19.     BOOL bRet;
  20.  
  21.     bRet = WriteConsole(hOutput, pszString, nLen, &nWritten, NULL);
  22.     return (!bRet || (nWritten != nLen)) ? 0 : nLen;
  23. }
  24.  
  25.  
  26. //
  27. // CtrlHandler
  28. //    Handle ctrl-c and ctrl-break
  29. //
  30. BOOL CtrlHandler(ULONG CtrlType)
  31. {
  32.     switch(CtrlType)
  33.     {
  34.     case CTRL_C_EVENT:
  35.         bCtrlC = TRUE;
  36.         return TRUE;
  37.  
  38.     case CTRL_BREAK_EVENT:
  39.         bCtrlBrk = TRUE;
  40.         return TRUE;
  41.  
  42.     default:
  43.         return FALSE;
  44.     }
  45. }
  46.  
  47.  
  48. int main(int argc, char *argv[])
  49. {
  50.     ConsPuts("Welcome to the control handler program.\r\n");
  51.  
  52.     // Set the handler
  53.     if(!SetConsoleCtrlHandler((PHANDLER_ROUTINE)&CtrlHandler, TRUE))
  54.     {
  55.         ConsPuts("Couldn't set handler!\r\n");
  56.         ExitProcess(1);
  57.     }
  58.  
  59.     // Spin waiting for an event
  60.     while(!bCtrlC && !bCtrlBrk)
  61.         ;
  62.  
  63.     // Identify the event an exit
  64.     if(bCtrlC)
  65.         ConsPuts("You hit ctrl-c.\r\n");
  66.     if(bCtrlBrk)
  67.         ConsPuts("You hit ctrl-break.\r\n");
  68.     return 0;
  69. }
  70.  
  71.  
  72.  
  73.