Einzelnen Beitrag anzeigen

DevilsCamp
(Gast)

n/a Beiträge
 
#14

Re: Rechner per Software ausschalten

  Alt 14. Jul 2005, 09:53
So hier mal eine Prozedur, die Windows herunterfährt bzw. neu startet.

Sie ist so geschrieben, dass sie sowohl mit Win9x als auch mit Win2000/XP funktioniert.


Delphi-Quellcode:
procedure BeendeWindows(Restart: Boolean);
var
  vi : TOSVersionInfo;
  hToken : THandle;
  tp : TTokenPrivileges;
  h : DWORD;
  i : Boolean;
  buffer : PChar;
  o : Integer;
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;
  if restart then
    i := ExitWindowsEx(EWX_REBOOT, 0)
  else
    i := ExitWindowsEx(EWX_POWEROFF, 0);

  h := GetLastError;
  GetMem(buffer, 1024);
  o := FORMAT_MESSAGE_FROM_HMODULE;
  FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, @o, h, 0, buffer, 1023, nil);
  FreeMem(Buffer);
end;
Sollte es aus irgendeinem Grund nicht möglich sein, den Neustart auszuführen, dann wird auch gleich die Fehlermeldung ausgegeben.
  Mit Zitat antworten Zitat