Registriert seit: 7. Okt 2004
509 Beiträge
Delphi 11 Alexandria
|
Re: windows herunterfahren zusammengefaßt
27. Jan 2008, 13:39
Vielleicht solltest du die ganzen IF-Abfragen durch eine CASE-Anweisung ersetzen. Dürfte übersichtlicher sein. Anbei mal die Funktion wie ich sie mir angepasst habe:
Delphi-Quellcode:
const
EWX_STANDBY = $20; // eigene Konstante für Standbymodus
EWX_LOCKWKS = $40; // eigene Konstante für das Sperren der Arbeitsstation
// Funktion um Windows herunterzufahren
// Die zu übergebenen Werte können "EWX_LOGOFF", "EWX_REBOOT",
// "EWX_SHUTDOWN", "EWX_STANDBY" oder "EWX_LOCKWKS" lauten.
function ExitWin(Flag : Word) : Boolean;
var
vi : TOSVersionInfo;
hToken : THandle;
tp : TTokenPrivileges;
h : DWord;
begin
vi.dwOSVersionInfoSize := SizeOf(vi);
GetVersionEx(vi);
if vi.dwPlatformId = VER_PLATFORM_WIN32_NT then // Windows NT/2K/XP
begin
OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES,hToken);
LookupPrivilegeValue( nil,' SeShutdownPrivilege', tp.Privileges[0].Luid);
tp.PrivilegeCount := 1;
tp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
h := 0;
AdjustTokenPrivileges(hToken,False, tp,0,PTokenPrivileges( nil)^,h);
CloseHandle(hToken);
case flag of
// Abmelden, Neu starten, Herunterfahren
EWX_LOGOFF,
EWX_REBOOT,
EWX_SHUTDOWN : Result := ExitWindowsEx(flag,0);
// Standbymodus
EWX_STANDBY : Result := SetSystemPowerState(True, True);
// Arbeitsstation sperren
EWX_LOCKWKS : Result := LockWorkstation;
else
// Wenn kein Parameter übergeben wurde ist Rückgabewert = FALSE
Result := False;
end;
end
else // Windows 9x/ME
begin
Result := ExitWindowsEx(flag,0);
end;
end;
|
|
Zitat
|