Hallo Reinhold probiers mal damit! ;o)
Windows 95/98/NT/2000 ShutDown
Der erste Parameter ist der String, der in der MessageBox erscheint. Wenn dieser Parameter leer ist, kommt auch keine Meldung. Dem zweiten Parameter muss ein Flag übergeben werden. Wie diese Flags lauten können ist unten aufgelistet.
function ExWindows(const AQuestion: string; flag: word): Boolean;
var
vi : TOSVersionInfo;
hToken : THandle;
tp : TTokenPrivileges;
h : DWord;
begin
result := false;
if Aquestion=’’ then
if MessageDlg(frage, mtConfirmation, [mbYes,mbNo],0) = IDNo then
exit;
vi.dwOSVersionInfoSize:=SizeOf(vi);
GetVersionEx(vi);
if vi.dwPlatformId = VER_PLATFORM_WIN32_NT then
begin
// Windows NT
// 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);
end
else
begin // Windows 95
Result := ExitWindowsEx(flag,0);
end;
end;
Aufgerufen werden kann diese Funktion folgendermaßen:
ExWindows(’’, ewx_logoff +flag); //Ausloggen
ExWindows(‚Beenden‘, ewx_poweroff+flag); //Beenden (ATX)
ExWindows(’’, ewx_reboot +flag); //Neustart
ExWindows(’’, ewx_shutdown+flag); //Ausloggen
Greetz Nik ;o)
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]