Einzelnen Beitrag anzeigen

doctor-x

Registriert seit: 29. Apr 2007
41 Beiträge
 
#18

AW: Shutdown Befehl auf Windows 7

  Alt 10. Jul 2011, 16:40
Hi,

ich benutze dafür fogenden code:

Code:
unit WHSystem;

interface

uses
  Classes, SysUtils, Windows, mmSystem;

const
  //Soft-Variante
  Logoff     = EWX_LOGOFF or EWX_FORCEIFHUNG;
  StandBy    = EWX_POWEROFF or EWX_FORCEIFHUNG;
  Reboot     = EWX_REBOOT or EWX_FORCEIFHUNG;
  Shutdown   = EWX_SHUTDOWN or EWX_FORCEIFHUNG;

  //Harte-Variante
  Logoff_F   = EWX_LOGOFF or EWX_FORCE;
  StandBy_F  = EWX_POWEROFF or EWX_FORCE;
  Reboot_F   = EWX_REBOOT or EWX_FORCE;
  Shutdown_F = EWX_SHUTDOWN or EWX_FORCE;

type
  ExitWindowsParameter = longword;

function ExitWindows (RebootParam : longword) : boolean;
//zB.: "EWX_REBOOT or EWX_FORCE" zum Neustarten
//Es können auch dierekt die Konstanten aus dieser Unit verwendet werden!
//Parameter      Wirkung

//EWX_LOGOFF     Alle Prozesse des Benutzers werden beendet, danach wird der Benutzer abgemeldet.

//EWX_POWEROFF   Fährt Windows herunter und setzt den Computer in den StandBy-Modus,
//                sofern von der Hardware unterstützt.

//EWX_REBOOT     Fährt Windows herunter und startet es neu.

//EWX_SHUTDOWN   Fährt Windows herunter.

//EWX_FORCE      Die aktiven Prozesse werden zwangsweise und ohne Rückfrage beendet.

//EWX_FORCEIFHUNG Windows 2000/XP: Die aktiven Prozesse werden aufgefordert, sich selbst zu beenden und
//                müssen dies bestätigen. Reagieren sie nicht, werden sie zwangsweise beendet.

implementation

function ExitWindows (RebootParam : longword) : boolean;
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 Windows.AdjustTokenPrivileges(TTokenHd, False, TTokenPvg, cbtpPrevious, rTTokenPvg, pcbtpPreviousRequired);
    end;
  end;
  Result := ExitWindowsEx(RebootParam, 0);
end;
Einfach und simpel zu benutzen^^
Code:
ExitWindows(Shutdown_F);
Funktioniert bei mir in Delphi und Lazarus unter WinXP und unter Win7 tadellos
Ich hoffe ich konnte helfen

Lg
Wolf
  Mit Zitat antworten Zitat