title: How to handle shutdown \ logoff in console application?
body: <p>I'm writting a console application in C++.</p>
  
  <p>I use SetConsoleCtrlHandler to trap any application close (CTRL+C, close console, windows shutdown or logoff).</p>
  
  <pre><code>#include &lt;windows.h&gt; 
  #include &lt;stdio.h&gt; 
  
  BOOL CtrlHandler( DWORD fdwCtrlType ) 
  {   
    switch( fdwCtrlType ) 
    { 
      // Handle the CTRL-C signal. 
      case CTRL_C_EVENT: 
        printf( "Ctrl-C event\n\n" );
        Beep( 750, 300 );
        return( TRUE );
  
      // CTRL-CLOSE: confirm that the user wants to exit. 
      case CTRL_CLOSE_EVENT: 
        Beep( 600, 200 ); 
        printf( "Ctrl-Close event\n\n" );
        return( TRUE ); 
  
      // Pass other signals to the next handler. 
      case CTRL_BREAK_EVENT: 
        Beep( 900, 200 ); 
        printf( "Ctrl-Break event\n\n" );
        return FALSE; 
  
      case CTRL_LOGOFF_EVENT: 
        Beep( 1000, 200 ); 
        printf( "Ctrl-Logoff event\n\n" );
        return FALSE; 
  
      case CTRL_SHUTDOWN_EVENT: 
        Beep( 750, 500 ); 
        printf( "Ctrl-Shutdown event\n\n" );
        return FALSE; 
  
      default: 
        return FALSE; 
    } 
  } 
  
  int main( void ) 
  {       
    //MessageBoxA(0, "test", "test", 0); // ****************
  
    if( SetConsoleCtrlHandler( (PHANDLER_ROUTINE) CtrlHandler, TRUE ) ) 
    { 
      printf( "\nThe Control Handler is installed.\n" ); 
      printf( "\n -- Now try pressing Ctrl+C or Ctrl+Break, or" ); 
      printf( "\n    try logging off or closing the console...\n" ); 
      printf( "\n(...waiting in a loop for events...)\n\n" ); 
  
      while( 1 ){ } 
    } 
    else 
    {
      printf( "\nERROR: Could not set control handler"); 
      return 1;
    }
    return 0;
  }
  </code></pre>
  
  <p>This is msdn example and it works fine, until I uncomment marked line. When I do it, my application handles CTRL+C, CTRL+Break and console close, but on shutdown or logoff it simply close without any reaction.</p>
  
  <p>Windows 7, MSVC 10 Express Edition</p>