000 
            09.01.2010, 21:31 Uhr 
            Hans 
            Library Walker (Operator)
             
            
             
             
             | 
          Hi,
  normalerweise sollte nach dem herunterfahren von Win 2000 Professionell eine Nachricht erscheinen, die besagt, das ich den Computer ausschalten kann. Aber seit einiger Zeit führt mein Rechner einen Neustart durch, obwohl ich im Beenden-dialog "Herunter fahren" gewählt habe. Hab ich da irgendwo was verstellt, und weis nicht wo?
  Eine weitere Möglichkeit wäre noch, das ein DemoProgramm zur API-Funktion ExitWindowsEx() irgendwelche einstellungen vorgenommen hat, ohne das mir das klar wäre. Denn ich meine, dass das Phänomen auftritt, seit ich das Programm mal laufen lies. Es sieht so aus: (weis nur gerade nicht, wo ich es her habe, also ob aus der msdn oder aus einem WinAPI-Buch.   ) 
   
  
  
    | C++: | 
   
  
    
      
  #include <windows.h>   #include "ExitWnd.h" 
  #if defined (WIN32)     #define IS_WIN32 TRUE #else     #define IS_WIN32 FALSE #endif
  #define IS_NT      IS_WIN32 && (BOOL)(GetVersion() < 0x80000000) #define IS_WIN32S  IS_WIN32 && (BOOL)(!(IS_NT) && (LOBYTE(LOWORD(GetVersion()))<4)) #define IS_WIN95   (BOOL)(!(IS_NT) && !(IS_WIN32S)) && IS_WIN32
  HINSTANCE hInst;   // current instance
  LPCTSTR lpszAppName  = "MyApp"; LPCTSTR lpszTitle    = "My Application"; 
  BOOL RegisterWin95( CONST WNDCLASS* lpwc );
  int APIENTRY WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,                       LPTSTR lpCmdLine, int nCmdShow) {    MSG      msg;    HWND     hWnd;     WNDCLASS wc;
     // Register the main application window class.    //............................................    wc.style         = CS_HREDRAW | CS_VREDRAW;    wc.lpfnWndProc   = (WNDPROC)WndProc;           wc.cbClsExtra    = 0;                          wc.cbWndExtra    = 0;                          wc.hInstance     = hInstance;                  wc.hIcon         = LoadIcon( hInstance, lpszAppName );     wc.hCursor       = LoadCursor(NULL, IDC_ARROW);    wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);    wc.lpszMenuName  = lpszAppName;                  wc.lpszClassName = lpszAppName;              
     if ( IS_WIN95 )    {       if ( !RegisterWin95( &wc ) )          return( FALSE );    }    else if ( !RegisterClass( &wc ) )       return( FALSE );
     hInst = hInstance; 
     // Create the main application window.    //....................................    hWnd = CreateWindow( lpszAppName,                          lpszTitle,                             WS_OVERLAPPEDWINDOW,                          CW_USEDEFAULT, 0,                          CW_USEDEFAULT, 0,                           NULL,                                       NULL,                                       hInstance,                                  NULL                                      );
     if ( !hWnd )        return( FALSE );
     ShowWindow( hWnd, nCmdShow );     UpdateWindow( hWnd );         
     while( GetMessage( &msg, NULL, 0, 0) )       {       TranslateMessage( &msg );        DispatchMessage( &msg );      }
     return( msg.wParam );  }
 
  BOOL RegisterWin95( CONST WNDCLASS* lpwc ) {    WNDCLASSEX wcex;
     wcex.style         = lpwc->style;    wcex.lpfnWndProc   = lpwc->lpfnWndProc;    wcex.cbClsExtra    = lpwc->cbClsExtra;    wcex.cbWndExtra    = lpwc->cbWndExtra;    wcex.hInstance     = lpwc->hInstance;    wcex.hIcon         = lpwc->hIcon;    wcex.hCursor       = lpwc->hCursor;    wcex.hbrBackground = lpwc->hbrBackground;    wcex.lpszMenuName  = lpwc->lpszMenuName;    wcex.lpszClassName = lpwc->lpszClassName;
     // Added elements for Windows 95.    //...............................    wcex.cbSize = sizeof(WNDCLASSEX);    wcex.hIconSm = LoadImage(wcex.hInstance, lpwc->lpszClassName,                              IMAGE_ICON, 16, 16,                             LR_DEFAULTCOLOR );                 return RegisterClassEx( &wcex ); }
  LRESULT CALLBACK WndProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam ) {    switch( uMsg )    {       case WM_COMMAND :               switch( LOWORD( wParam ) )               {                  case IDM_TEST :                         // Start the logoff procedure.                         //............................                         if ( ExitWindowsEx( EWX_LOGOFF, 0 ) )                            DestroyWindow( hWnd );                                                    break;
                   case IDM_ABOUT :                         DialogBox( hInst, "AboutBox", hWnd, (DLGPROC)About );                         break;
                   case IDM_EXIT :                         DestroyWindow( hWnd );                         break;               }               break;               case WM_QUERYENDSESSION :                // Last chance to stop the log off from happening.                // This is only sent in Windows NT, Windows 95 does                // not send this to the application that called ExitWindows().                //............................................................                if ( MessageBox( hWnd, "Logoff Windows?", lpszAppName,                                  MB_YESNO | MB_ICONQUESTION ) == IDYES )                {                   return( TRUE );                }                break;
        case WM_DESTROY :               PostQuitMessage(0);               break;
        default :             return( DefWindowProc( hWnd, uMsg, wParam, lParam ) );    }
     return( 0L ); }
 
  LRESULT CALLBACK About( HWND hDlg,                                    UINT message,                                 WPARAM wParam,                                LPARAM lParam) {    switch (message)     {        case WM_INITDIALOG:                 return (TRUE);
         case WM_COMMAND:                                              if (   LOWORD(wParam) == IDOK                             || LOWORD(wParam) == IDCANCEL)                    {                        EndDialog(hDlg, TRUE);                                return (TRUE);                }                break;    }
     return (FALSE);  } 
       
      
     | 
   
   
  
  Die zugehörige .h-Datei: 
   
  
  
    | C++: | 
   
  
    
      
  #define IDM_EXIT           100 #define IDM_TEST           200 #define IDM_ABOUT          301
  LRESULT CALLBACK WndProc  (HWND, UINT, WPARAM, LPARAM); LRESULT CALLBACK About    (HWND, UINT, WPARAM, LPARAM); 
       
      
     | 
   
   
  
  Hat da jemand 'ne Idee?
  Hans -- Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier:  Nachdenkseiten oder  Infoportal Globalisierung. |