Delphi-PRAXiS

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)

XBladerX 5. Jul 2011 18:00

Shutdown Befehl auf Windows 7
 
hey Leute :) bin neu hier im forum und auch noch ziemlich unerfahren was das programmieren angeht :)

ich wollte einen shutdown Button programmieren also ein button der bei klicken den Pc runterfährt ... alles was ich hier gefunden habe funktioniert leider nicht ... ich kenn mich mit dem ganzen noch nicht so aus wie schon gesagt ... der hauptgrund dafür ist das unsere informatiklehrerin nur sinnlosen scheiß mit uns macht den wir nie mehr brauchen werden ..

wenn einer ne idee/nen Befehl hat wie das funktionert ( also auf Windows 7) bitte antworten =) danke im vorraus ;)

mkinzler 5. Jul 2011 18:03

AW: Shutdown Befehl auf Windows 7
 
Egal welche Lösung. Sie funktioniert nur wenn Adminrechte vorhanden sind.

Luckie 5. Jul 2011 18:44

AW: Shutdown Befehl auf Windows 7
 
Und eine Schlatfläche zum Runterfahren des Rechners ist kein sinnloser Scheiß? Mit der Aussage wäre ich aber ganz vorsichtig. Denn ich hatte eigentlich als professioneller Softwareentwickler noch nie eine Verwendung für solch eine Routine.

@mkinzler: Äh wie? Seit wann braucht man zum Aufruf der Funktion ExitWindowsEx Administratorenrechte? Es müssen nur die nätigen Privilegien aktiviert werden.

@XBladerX: Wenn du uns jetzt noch verraten würdest, was du ausprobiert hast und was nicht funktioniert hat, könnte man dir eventuell sogar helfen. Aber ich bin mir ziemlich sicher, dass man mit der Suche nach "windows runterfahren" bestimmt funktionstüchtigen Code findet.

XBladerX 6. Jul 2011 09:12

AW: Shutdown Befehl auf Windows 7
 
http://www.delphipraxis.net/29-abmel...-98-me-nt.html

das hab ich versucht ... der logoff befehl funktioniert einwandfrei ... der rest aber nicht ....
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.
war der quelltext ... funktioiert halt nicht ... sag mal .. wie komme ich den an die privilegien die ich brauche ?

danke schonmal für eure schnellen antworten :)

wenn ich wieder at home bin geb ich euch das programm mal =)

DeddyH 6. Jul 2011 09:14

AW: Shutdown Befehl auf Windows 7
 
Wie Du an die Privilegien kommst, hat Daniel doch im von Dir selbst verlinkten Thread direkt als 2. Beitrag geschrieben.

blackfin 6. Jul 2011 09:26

AW: Shutdown Befehl auf Windows 7
 
Zitat:

Denn ich hatte eigentlich als professioneller Softwareentwickler noch nie eine Verwendung für solch eine Routine.
Naja...ok, ein Shutdown-Button ist meistens wirklich Quark.
Aber es gibt Tools, die eine Shutdown-Funktion schon gebrauchen können, nämlich solche, die sehr lange laufen (Defragger, Indexer, Virenscanner etc.)
und da ist es ganz praktisch, wenn man eine Option hat, die den Rechner nach Abschluss der Tätigkeiten des Programms runterfährt.
Allerdings laufen solche Tools eh meist mit Adminrechten...

ConnorMcLeod 6. Jul 2011 09:27

AW: Shutdown Befehl auf Windows 7
 
Zitat:

Zitat von Luckie (Beitrag 1110141)
Und eine Schlatfläche zum Runterfahren des Rechners ist kein sinnloser Scheiß? Mit der Aussage wäre ich aber ganz vorsichtig. Denn ich hatte eigentlich als professioneller Softwareentwickler noch nie eine Verwendung für solch eine Routine.

Solche Aussagen sollten bei ernsthaften Postings erstmal gar nicht vorkommen. Dann erübrigt sich die Vorsicht.

Zur Verwendung: z.B. eine POS-Kasse, die nur mit Fingern (Touchscreen) bedient wird und den kompletten Bildschirm einnimmt, sollte auch den Rechner runterfahren können.

XBladerX 6. Jul 2011 20:46

AW: Shutdown Befehl auf Windows 7
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Wie Du an die Privilegien kommst, hat Daniel doch im von Dir selbst verlinkten Thread direkt als 2. Beitrag geschrieben.
wo steht das ? bin etwas sehr blind und ... wer ist daniel ?

so das programm ist jetzt als anhang da ...

Luckie 6. Jul 2011 20:48

AW: Shutdown Befehl auf Windows 7
 
Daniel ist der Administrator vom Forum. Aber das ist auch sein Benutzername. Du solltest also den Beitrag finden. Und mal etwas runterscrollen zum zweiten Beitrag sollte nicht so schwer sein.

XBladerX 6. Jul 2011 20:53

AW: Shutdown Befehl auf Windows 7
 
danke xD

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 14:44 Uhr.

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