Registriert seit: 2. Okt 2004
319 Beiträge
|
Re: Problem mit Herunterfahren (schon viel probiert)
7. Mär 2007, 09:56
Ich mache das so:
Delphi-Quellcode:
type
TExit=(Reboot,Shutdown,Logoff,Hibernate,Standby);
procedure ExitWin(Exit:TExit;Force:boolean);
//Urheber: [url]www.delphipraxis.net[/url] (Daniel B. & NikoMitDaMacht)
var Flags:integer;
begin
GetShutdownPrivileges;
if Exit=Shutdown then
ExitWindowsEx(EWX_ShutDown,0);
if Exit=Hibernate then
SetSystemPowerState(false,Force);
if Exit=Standby then
SetSystemPowerState(true,Force);
if Exit=Logoff then
begin
Flags:=EWX_LOGoff;
if Force then
flags:=flags+EWX_FORCE;
ExitWindowsEx(flags,0);
end;
if Exit=Reboot then
begin
flags:=EWX_REBOOT;
if Force then
flags:=flags+EWX_FORCE;
ExitWindowsEx(flags,0);
end;
end;
Delphi-Quellcode:
procedure GetShutdownPrivileges;
var vi : TOSVersionInfo;
hToken : THandle;
tp : TTokenPrivileges;
h : DWord;
begin
vi.dwOSVersionInfoSize:=SizeOf(vi);
GetVersionEx(vi);
if vi.dwPlatformId = VER_PLATFORM_WIN32_NT then
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);
end;
end;
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
ExitWin(Shutdown,true);
end;
Lucky hatte zwar schonmal was dagegen, weil ich eine exception oder so weggelassen habe, aber bei mir funktioniert das wunderbar (Win XP)
greetings ...
Achim
|
|
Zitat
|