home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Windows Gam…ming Gurus (2nd Edition) / Disc2.iso / msdn_vcb / samples / vc98 / sdk / winui / console / handler.c < prev    next >
Encoding:
C/C++ Source or Header  |  1997-10-05  |  4.1 KB  |  103 lines

  1.  
  2. /******************************************************************************\
  3. *       This is a part of the Microsoft Source Code Samples. 
  4. *       Copyright (C) 1993-1997 Microsoft Corporation.
  5. *       All rights reserved. 
  6. *       This source code is only intended as a supplement to 
  7. *       Microsoft Development Tools and/or WinHelp documentation.
  8. *       See these sources for detailed information regarding the 
  9. *       Microsoft samples programs.
  10. \******************************************************************************/
  11.  
  12. #include <windows.h>
  13. #include <string.h>
  14. #include "console.h"
  15.  
  16. HANDLE hConsole; /* current console output handle */
  17.  
  18. /*******************************************************************
  19. * FUNCTION: handler_routine(DWORD dwCtrlType)                      *
  20. *                                                                  *
  21. * PURPOSE: this is the control handler routine activated by ctrl+c *
  22. *          or ctrl+break keys                                      *
  23. *                                                                  *
  24. * INPUT: the type of control event                                 *
  25. *******************************************************************/
  26.  
  27. BOOL WINAPI handler_routine(DWORD dwCtrlType)
  28. {
  29.   CHAR szTemp[64];
  30.  
  31.   /* print out what control event was received to the current console */
  32.   switch(dwCtrlType)
  33.     {
  34.     case CTRL_C_EVENT:
  35.       strcpy(szTemp, "CTRL_C_EVENT");
  36.       break;
  37.     case CTRL_BREAK_EVENT:
  38.       strcpy(szTemp, "CTRL_BREAK_EVENT");
  39.       break;
  40.     case CTRL_CLOSE_EVENT:
  41.       strcpy(szTemp, "CTRL_CLOSE_EVENT");
  42.       break;
  43.     case CTRL_LOGOFF_EVENT:
  44.       strcpy(szTemp, "CTRL_LOGOFF_EVENT");
  45.       break;
  46.     case CTRL_SHUTDOWN_EVENT:
  47.       strcpy(szTemp, "CTRL_SHUTDOWN_EVENT");
  48.       break;
  49.     default:
  50.       strcpy(szTemp, "unknown event");
  51.       break;
  52.     }
  53.   strcat(szTemp, " detected");
  54.   myPuts(hConsole, szTemp);
  55.   return(TRUE);
  56. }
  57.  
  58.  
  59. /*********************************************************************
  60. * FUNCTION: demoSetCtrlHandler(HANDLE hConOut)                       *
  61. *                                                                    *
  62. * PURPOSE: demonstrate SetConsoleCtrlHandler by setting a ctrl+break *
  63. *          and ctrl+c handler. When the user hits either one of      *
  64. *          these keys, a message is printed to the console           *
  65. *          indicating the event.                                     *
  66. *                                                                    *
  67. * INPUT: the output handle to write to                               *
  68. *********************************************************************/
  69.  
  70. void demoSetCtrlHandler(HANDLE hConOut)
  71. {
  72.   BOOL bSuccess;
  73.  
  74.   setConTitle(__FILE__);
  75.   hConsole = hConOut; /* set global console output handle for handler */
  76.   myPuts(hConOut, "Let's install a ctrl+c and ctrl+break handler for this\n"
  77.                   "process. Hit ctrl+c and ctrl+break a few times to test\n"
  78.                   "the handler. Hit enter to return...");
  79.   /* set handler for this process */
  80.   bSuccess = SetConsoleCtrlHandler(handler_routine, TRUE);
  81.   PERR(bSuccess, "SetConsoleCtrlHandler");
  82.   /* wait for user to hit enter */
  83.   while (myGetchar() != 0xd)
  84.     ;
  85.   /* now let's generate some control events */
  86.   myPuts(hConOut, "Now we'll use GenerateConsoleCtrlEvent to generate a\n"
  87.                   "ctrl+c and a ctrl+break event...\n");
  88.   bSuccess = GenerateConsoleCtrlEvent(CTRL_C_EVENT, 0);
  89.   PERR(bSuccess, "GenerateConsoleCtrlEvent");
  90.   bSuccess = GenerateConsoleCtrlEvent(CTRL_BREAK_EVENT, 0);
  91.   PERR(bSuccess, "GenerateConsoleCtrlEvent");
  92.   Sleep(1000); /* give ctrl handle time to output messages */
  93.   myPuts(hConOut, "\nNow choose 'Close' then 'Cancel' from the system\n"
  94.                   "menu of this console and note that we receive a\n"
  95.                   "CTRL_CLOSE_EVENT...\n");
  96.   myPuts(hConOut, "\nHit enter to continue...");
  97.   myGetchar();
  98.   /* remove our handler from the list of handlers */
  99.   bSuccess = SetConsoleCtrlHandler(handler_routine, FALSE);
  100.   PERR(bSuccess, "SetConsoleCtrlHandler");
  101.   return;
  102. }
  103.