Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Shutdown Befehl auf Windows 7 (https://www.delphipraxis.net/161485-shutdown-befehl-auf-windows-7-a.html)

Luckie 6. Jul 2011 20:55

AW: Shutdown Befehl auf Windows 7
 
Ich sehe gerade, man muss noch nicht mal runterscrollen und Das Thema besteht nur aus zwei Beiträgen.

himitsu 7. Jul 2011 08:25

AW: Shutdown Befehl auf Windows 7
 
Zitat:

Zitat von XBladerX (Beitrag 1110236)
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  ExitWindowsEx(EWX_SHUTDOWN, 0);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
ExitWindowsEx(EWX_REBOOT, 0);
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  ExitWindowsEx(EWX_LOGOFF, 0);
end;

end.

Wie du vielleicht in nahezu allen Threads zu ExitWindowsEx gesehn haben könntest, hat ExitWindowsEx einen Rückgabewert, welchen man auswerten sollte und wie im MSDN (das ist das, wo die Beschreibung zu solchen Windowsbefehlen drinsteht) geschrieben steht, bekommt man über GetLastError im Fehlerfall auch noch einen genaueren Grund, warum es nicht ging.

MSDN-Library durchsuchenExitWindowsEx
MSDN-Library durchsuchenGetLastError
Delphi-Referenz durchsuchenSysErrorMessage
Delphi-Referenz durchsuchenShowMessage
oder statt SysErrorMessage und ShowMessage gleich ein Delphi-Referenz durchsuchenRaiseLastOSError

Und schon hättest du gleich gewust, warum bei dir der Befehl nicht geht.

PS: Man muß sich nicht nur die nötigen Privilegien freischalten ... diese Privilegien dürfen auch nicht vom Administrator deaktiviert wurden sein, sonnst kann man sie ja garnicht aktivieren. :angle:

XBladerX 9. Jul 2011 23:01

AW: Shutdown Befehl auf Windows 7
 
Das programm funktioniert immer noch nicht .. :(

Luckie 9. Jul 2011 23:25

AW: Shutdown Befehl auf Windows 7
 
OK.

blackfin 9. Jul 2011 23:44

AW: Shutdown Befehl auf Windows 7
 
Zitat:

Das programm funktioniert immer noch nicht ..
Die DP mit Twitter verwechselt? :stupid:

R2009 10. Jul 2011 08:29

AW: Shutdown Befehl auf Windows 7
 
Hi,
hier ist die Lösung funktioniert einwandfrei:
In Nameadress muss die IP des runterzufahrenden Rechners stehen.
In deinem Fall deine eigene.

Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var a:string;
begin
  a:='cmd /C shutdown /t 1 /s /f /m \\'+Nameaddress;
  ShellExecute(handle, nil, PChar('cmd.exe'), PChar(a), nil, SW_SHOWNOACTIVATE);
end;
Wenn du shellexecute nicht verstehst googln.
Verlass dich drauf man kann sowas brauchen. Ich kontrolliere damit 12 Server. (Notshutdown Reboot usw)
Was ist denn dann schlecht dabei wenn mein eigener Rechner ebenfalls runtergefahren werden kann.
Grüsse
Rainer

DeddyH 10. Jul 2011 08:58

AW: Shutdown Befehl auf Windows 7
 
Funktioniert das auch noch, wenn Du keine Admin-Rechte hast?

doctor-x 10. Jul 2011 15:40

AW: Shutdown Befehl auf Windows 7
 
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 :idea:

Lg

Luckie 10. Jul 2011 15:56

AW: Shutdown Befehl auf Windows 7
 
Ähnlichen Code haben wir, glaube ich schon fünf mal verlinkt.

Aber wie wäre es bei dir mal mit einer Fehlerbehandlung?


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:47 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz