Einzelnen Beitrag anzeigen

Benutzerbild von Mazel
Mazel

Registriert seit: 11. Nov 2005
Ort: Leipzig
831 Beiträge
 
#20

Re: Windows in 5 Sekunden ausschalten, aber wie?

  Alt 31. Dez 2005, 21:15
So, habs nun denke ich geschafft, laufen tut's aber ob es so richtig ist, weiss ich nicht:

Delphi-Quellcode:
uses
 jwaNative;

{$R *.dfm}

function TForm1.ExWindows(const AFlag: Word): Boolean;
var
 vi: TOSVersionInfo;
 hToken: THandle;
 tp: TTokenPrivileges;
 h: DWord;

begin
 Result:=False;
 vi.dwOSVersionInfoSize:=SizeOf(vi);
 If GetVersionEx(vi) then
  begin
   If vi.dwPlatformId = VER_PLATFORM_WIN32_NT then
    begin
     If OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES, hToken) then
      begin
       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);
       
       //Hier nun der besondere Teil
       NtShutdownSystem(SHUTDOWNNOREBOOT);

      end;
    end
   Else Result:=ExitWindowsEx(Aflag, 0);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 ExWindows(EWX_SHUTDOWN or EWX_FORCE);
end;

end.
Gruß
Mazel
Marcel Jänicke
www.mj-software.net
  Mit Zitat antworten Zitat