Forum: PC-Programmierung ExitWindowsEx


von urmel (Gast)


Lesenswert?

Hallo

Ich habe mir ein Programm erstellt, mit dem ich jedes Windows neu
Booten möchte. Bei XP gehts aber bei 98 erzählt mir der Rechner, dass
erst die EXE beendet werden müsste befor Windows runterfahren kann.
Wenn ich die EXE schliesse passiert aber nix.

Ich benutze diesen Code.

HANDLE hToken;
TOKEN_PRIVILEGES tkp;
OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES |
TOKEN_QUERY, &hToken);
LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME,&tkp.Privileges[0].Luid);
tkp.PrivilegeCount = 1;
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken, FALSE, &tkp, 0,(PTOKEN_PRIVILEGES)NULL,
0);
ExitWindowsEx(EWX_REBOOT, 0);

Habe auch das Gantze nur mit ExitWindowsEx(EWX_REBOOT, 0); ausprobiert.
Auch nix.
Wer kann mir sagen wo der Fehler für Win 98 sitzt.

von Chris (Gast)


Lesenswert?

Hast du mal in der Doku des Plattform-SDKs nachgesehen?

Da steht nämlich eine Bemerkung zu Win9x:
> Windows Me/98/95:
> ExitWindowsEx does not work from a console application.

von urmel (Gast)


Lesenswert?

MSDN meinte das Geht.
Wie kann ich das denn sonst machen?

von Chris (Gast)


Lesenswert?

> MSDN meinte das Geht.
Tut es das?
Schau lieber nochmal genau nach. :-)
http://msdn.microsoft.com/library/en-us/sysinfo/base/exitwindowsex.asp

> Wie kann ich das denn sonst machen?
Ich würde wahrscheinlich eine WinAPI-Anwendung erstellen, also keine
Konsolenanwendung und mit WinMain. Mir fällt nämlich gerade keine
Alternative zu ExitWindowsEx ein, die unter Win9x funktioniert.
Möglich, dass es eine elegantere Methode gibt.

von Frank S. (Gast)


Lesenswert?

@urmel

Ich habe zwar kein WIN98 mehr zur Hand, habe das aber aus einer alten
Doku:
Rundll32 Shell32.dll,SHExitWindowsEx 0  Anwender abmelden
Rundll32 Shell32.dll,SHExitWindowsEx 1  Windows beenden
Rundll32 Shell32.dll,SHExitWindowsEx 2  Windows neu starten
Rundll32 Shell32.dll,SHExitWindowsEx 4  Windows beenden, auch wenn noch
Anwendungen offen sind
Rundll32 Shell32.dll,SHExitWindowsEx 8  Rechner ausschalten
Rundll32 Shell32.dll,SHExitWindowsEx 13  Funktion 1 + 4 + 8 zusammen
ausführen
Gross/Kleinschreibung beim Kommando ist wichtig. Kommandos gelten nur
für WIN9X/ME. Hatte das früher mal als Icon auf dem Desktop und konnte
per Doppelklick oder Tastenkombination den Rechner ausschalten oder
rebooten.

mit freundlichen Grüßen

Frank

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.