Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » Windows » Win2000 herunter fahren

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
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.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
09.01.2010, 22:19 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


benutz mal


C++:
ExitWindowsEx( EWX_SHUTDOWN, 0 )



evtl schaltet er sich dann aus entsprechend, ohne einen neustart durchzuführen. (also anstatt über "herunterfahren" ...
--
class God : public ChuckNorris { };

Dieser Post wurde am 09.01.2010 um 22:19 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
10.01.2010, 22:04 Uhr
Hans
Library Walker
(Operator)


Hi Flo,

das funktioniert bisher noch nicht. Für EWX_SHUTDOWN benötigt das Programm ein paar Privilegien, die es so nicht hat. Dafür muss ich mich noch durch die msdn kämpfen.

Aber gibt es keinen Weg, das über die Systemsteuerung (mit Tweak UI) irgendwie einzustellen, oder einen Schlüssel in der Registry?

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
10.01.2010, 22:31 Uhr
FloSoft
Medialer Over-Flow
(Administrator)



Zitat von Hans:
Hi Flo,

das funktioniert bisher noch nicht. Für EWX_SHUTDOWN benötigt das Programm ein paar Privilegien, die es so nicht hat. Dafür muss ich mich noch durch die msdn kämpfen.



jo muss man das privileg sich erst holen,
hab etz auf die schnelle nur nen VB-Code gefunden: www.developerfusion.com/forum/thread/27092/

aber man kanns ja ummünzen.


Zitat:

Aber gibt es keinen Weg, das über die Systemsteuerung (mit Tweak UI) irgendwie einzustellen, oder einen Schlüssel in der Registry?



ka, denk nicht. Was du höchstens mal probieren könntest, ist im Gerätemanager das "ACPI-PC" oder "Standard-PC" durch das jeweils andere treibermäßig zu "tauschen", evtl funktioniert das dann wieder korrekt.
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
10.01.2010, 22:41 Uhr
Hans
Library Walker
(Operator)


VB-Code hab ich in der msdn auch gefunden...
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
11.01.2010, 16:31 Uhr
mmc20
puss in boots


hi, ich hatte das mal so benutzt...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
11.01.2010, 17:26 Uhr
Tommix



Hallo,
sieh mal im BIOS ob APM aktiv ist:
www.pcwelt.de/forum/windows-nt-2000/91583-windows-2000-startet-immer-neu.html
Gruß, Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
11.01.2010, 22:42 Uhr
Hans
Library Walker
(Operator)


Hi,

hab inzwischen auch C-Code in der msdn gefunden.

Hab den dortigen Beispielcode in ein kurzes Programm mit dem sinnigen Namen "Suhtdown" eingebaut.

C++:
/* Datei: shutdown.c

   Um das Systm herunter zu fahren...
   Die Funktion MySystemShutdown() stammt aus der msdn;
   http://msdn.microsoft.com/en-us/library/aa376871(VS.85).aspx
   den Rest hab ich drum rum gebaut.
*/


#include <stdio.h>
#include <windows.h>

BOOL MySystemShutdown();

int main()
{
    if (MySystemShutdown() == TRUE)
        printf ("\nSystem wird herunter gefahren...");
    else
       printf ("\nEs ist ein Fehler aufgetreten. System läuft weiter.\n");

    return 0;
}



Beim testen bekam ich nach dem herunterfahren die Meldung, das ich den Rechner ausschalten kann.
Und danke für den Tip mit APM, das könnte auch ein Grund sein, obwohl ich es noch nicht überprüft habe.

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.

Dieser Post wurde am 11.01.2010 um 22:49 Uhr von Hans editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ Windows ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: