Hallo Freunde
,
ich hab auch ein kleines Problemchen mit dem Code...
hab folgenden Code zum herunterfahren benutzt:
Delphi-Quellcode:
function Tform1.ExitWin(flag : word): Boolean;
var vi : TOSVersionInfo;
hToken : THandle;
tp : TTokenPrivileges;
h : DWord;
begin
//result := false;
vi.dwOSVersionInfoSize:=SizeOf(vi);
GetVersionEx(vi);
if vi.dwPlatformId = VER_PLATFORM_WIN32_NT
then // Windows NT
begin
// Achtung bei Delphi 2 muß @hToken stehen ...
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);
result := ExitWindowsEx(flag,0);
Application.Terminate;
end
else // Windows 95
begin
Result := ExitWindowsEx(flag,0);
Application.Terminate;
end;
end;
bei mir (WinME) klappt das auch wunderbar, aber bei WinXP klappt es gar nicht, da das Prog dann abschmiert....
woran kann das liegen? verwende ich falsche flags oder sowas?
ich hab EWX_POWEROFF or EWX_FORCEIFHUNG benutzt.
MfG Lefko.
PS: und wieso beendet sich das prog nicht noch schnell, nachdem es den befehl zum runterfahren gegeben hat? ist irgendwie doof, geht das nicht zu machen?