Einzelnen Beitrag anzeigen

Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.323 Beiträge
 
Delphi XE2 Professional
 
#2

AW: Rechner Herunterfahren geht nicht

  Alt 14. Aug 2013, 13:07
Hallo,

ich nutz folgenden Code um runterzufahren, etc., und das ohne Probleme.

Delphi-Quellcode:
function ExitWindows(RebootParam: Longword): Boolean;
//mögliche RebootParam:
//EWX_SHUTDOWN or EWX_FORCE = shutdown
//EWX_REBOOT or EWX_FORCE = reboot
//EWX_LOGOFF or EWX_FORCE = logoff
//
//EWX_FORCE - Die aktiven Prozesse werden zwangsweise und ohne Rückfrage beendet.

var
  TTokenHd : THandle;
  TTokenPvg : TTokenPrivileges;
  cbtpPrevious : DWORD;
  rTTokenPvg : TTokenPrivileges;
  pcbtpPreviousRequired : DWORD;
  tpResult : Boolean;

const
  SE_SHUTDOWN_NAME = 'SeShutdownPrivilege';

begin
  If Win32Platform = VER_PLATFORM_WIN32_NT then
    begin
      tpResult := OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES or
                                    TOKEN_QUERY, TTokenHd);

      If tpResult then
        begin
          tpResult := LookupPrivilegeValue(nil, SE_SHUTDOWN_NAME, TTokenPvg.Privileges[0].Luid);

          TTokenPvg.PrivilegeCount := 1;
          TTokenPvg.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
          cbtpPrevious := SizeOf(rTTokenPvg);
          pcbtpPreviousRequired := 0;

          If tpResult then
            AdjustTokenPrivileges(TTokenHd, false, TTokenPvg, cbtpPrevious,
                                  rTTokenPvg, pcbtpPreviousRequired);
        end;
    end;

  Result := ExitWindowsEx(RebootParam, 0);
end;
Aufruf:
Delphi-Quellcode:
  //Benutzer abmelden
  ExitWindows(EWX_LOGOFF or EWX_FORCE)

  //Windows neu starten
  ExitWindows(EWX_REBOOT or EWX_FORCE)

  //Windows herunterfahren
  ExitWindows(EWX_SHUTDOWN or EWX_FORCE)
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat