Autor |
Beitrag |
Apollo
      
Beiträge: 125
Windows 7
Delphi 3 Prof., Delphi 2005
|
Verfasst: Mo 07.01.08 13:34
Hallo Delphianer,
gibt es eine Möglichkeit, den PC mit einem Click auf einem Button herunterzufahren?
Also das Beenden-Menü mit "Herunterfahren", "Neustart" und "Abmelden" aufzurufen?
Danke im voraus. Moderiert von Narses: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am Mo 07.01.2008 um 13:07
_________________ Im Zweifelsfall immer das Richtige tun
|
|
jackle32
      
Beiträge: 183
Erhaltene Danke: 7
Win7
Delphi XE5 Starter, RAD Studio XE7 Pro
|
Verfasst: Mo 07.01.08 13:42
Ja, das geht über den Aufruf eine Windowsfunktion mittels "ShellExecute".
Die Funktion die du Aufrufen musst heißt dann "Shutdown". Für die Parameter, die in den verschiedenen Fällen übergeben werden müssen einfach mal in der Windowshilfe danach suchen, steht da recht ausführliche drin.
Gruß Jack
_________________ Es gibt keine dummen Fragen, nur dumme Antworten.
|
|
Timosch
      
Beiträge: 1314
Debian Squeeze, Win 7 Prof.
D7 Pers
|
Verfasst: Mo 07.01.08 15:40
Arrgh! Man ruft keine Funktionen auf, indem man externe Programme startet. Ineffizient und schlechter Stil. Wenn ich will, dass ein Benutzer etwas eingibt, starte ich ja auch nicht den Notepad, sondern leg ein TMemo auf mein Formular. Außerdem existiert die shutdown.exe nicht auf jedem System.
Stattdessen ExitWindowsEx, such mal im Forum danach. AFAIK gibt es da auch einen Beitrag in der Library.
EDIT: www.delphi-library.de/viewtopic.php?t=8272
Hätte man aber auch sehr schnell selbst mit der Suche finden können.
Oder willst du das Dialogfeld "Herunterfahren" anzeigen lassen? Da musst du mit ShellExecute rundll32.exe mit irgendeinem Parameter aufrufen; ich weiß aber nicht, mit welchem.
_________________ If liberty means anything at all, it means the right to tell people what they do not want to hear. - George Orwell
|
|
COMMANDER86
      
Beiträge: 167
Win XP, Win Vista
D3 Prof., D7 Pers., Lazarus
|
Verfasst: Mo 07.01.08 16:25
Herunterfahren: "rundll32.exe user,exitwindows"
_________________ Streichen Sie bitte sämtlichen Sarkasmus aus vorhergehender Nachricht. Dann wissen Sie, was ich sagen möchte. Meine Lösungen sind die vermutlich Umständlichsten, aber sie funktionieren (bei mir).
|
|
Timosch
      
Beiträge: 1314
Debian Squeeze, Win 7 Prof.
D7 Pers
|
Verfasst: Mo 07.01.08 16:36
COMMANDER86 hat folgendes geschrieben: | Herunterfahren: "rundll32.exe user,exitwindows" |
Nochmals: Nein!
Wenn schon, dann ruf einfach ExitWindows auf. rundll32.exe dient bloß als Umweg, z.B. über Batch-Dateien. Hier völlig unnötig. Aber ExitWindows ist AFAIK deprecated und von ExitWindowsEx abgelöst. Man ruft keine Programme auf, wenn es dafür auch eine API-Funktion gibt. Schließlich machen die aufgerufenen Programme auch nichts anderes, als die entsprechenden API-Funktionen aufzurufen.
Oder wolltest du auf meine Frage antworten
Timosch hat folgendes geschrieben: | Oder willst du das Dialogfeld "Herunterfahren" anzeigen lassen? Da musst du mit ShellExecute rundll32.exe mit irgendeinem Parameter aufrufen; ich weiß aber nicht, mit welchem. |
ExitWindows fährt den PC direkt runter. Ich suche den Aufruf für das Dialogfeld.
_________________ If liberty means anything at all, it means the right to tell people what they do not want to hear. - George Orwell
|
|
Apollo 
      
Beiträge: 125
Windows 7
Delphi 3 Prof., Delphi 2005
|
Verfasst: Mo 07.01.08 18:14
|
|
Timosch
      
Beiträge: 1314
Debian Squeeze, Win 7 Prof.
D7 Pers
|
Verfasst: Mo 07.01.08 18:18
Apollo hat folgendes geschrieben: | Ich habe jetzt mal
Delphi-Quelltext 1:
| ExitWindowsEx (Ewx_Shutdown, $FFFFFFFF); |
und
Delphi-Quelltext 1:
| ExitWindowsEX (Ewx_Reboot, $FFFFFFFF); |
ausprobiert. Funktioniert leider nicht aber
Delphi-Quelltext 1:
| ExitWindowsEX (Ewx_Logoff, $FFFFFFFF); |
Hab Keine Ahnung warum  |
In der Library stehts doch: Unter NT braucht der Aufruf u.U. bestimmte Privilegien, die man sich holen muss. Der Quelltext in, der dort weiter unten stand, erledigt das von alleine.
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58:
| uses Windows;
type TShutdownWindowsType = (swtShutdown, swtShutdownPowerOff, swtRestart, swtLogoff);
function ShutdownWindows (aType: TShutdownWindowsType): Boolean;
function ShutdownWindows (aType: TShutdownWindowsType): Boolean;
const cSE_SHUTDOWN_NAME = 'SeShutdownPrivilege'; cFlagValue: Array [TShutdownWindowsType] Of UINT = ( EWX_SHUTDOWN, EWX_SHUTDOWN or EWX_POWEROFF, EWX_REBOOT, EWX_LOGOFF );
var OSVersionInfo: TOSVersionInfo; hToken: THandle; hProcess: THandle; TokenPriv: TTokenPrivileges; ReturnLength: DWORD;
begin Result := False;
OSVersionInfo.dwOSVersionInfoSize := SizeOf (OSVersionInfo); if not GetVersionEx (OSVersionInfo) then Exit;
if OSVersionInfo.dwPlatformId = VER_PLATFORM_WIN32_NT then begin hProcess := GetCurrentProcess; if not OpenProcessToken (hProcess, TOKEN_ADJUST_PRIVILEGES, hToken) then Exit;
if not LookupPrivilegeValue (nil, cSE_SHUTDOWN_NAME, TokenPriv.Privileges[0].Luid) then Exit;
TokenPriv.PrivilegeCount := 1; TokenPriv.Privileges [0].Attributes := SE_PRIVILEGE_ENABLED;
if not AdjustTokenPrivileges ( hToken, False, TokenPriv, 0, PTokenPrivileges (nil)^, ReturnLength ) then Exit;
CloseHandle (hToken); end;
ShutdownWindows := ExitWindowsEx (cFlagValue [aType], $FFFFFFFF); end |
Und dann einfach nur ShutDownWindows mit entsprechenden Parametern aufrufen.
_________________ If liberty means anything at all, it means the right to tell people what they do not want to hear. - George Orwell
Zuletzt bearbeitet von Timosch am Mo 07.01.08 18:21, insgesamt 1-mal bearbeitet
|
|
Yogu
      
Beiträge: 2598
Erhaltene Danke: 156
Ubuntu 13.04, Win 7
C# (VS 2013)
|
Verfasst: Mo 07.01.08 18:20
Du musst noch eine kleine Windows-Versions-Überprüfung einfügen. Im DSDT wird das schön erklärt. Oder du scrollst ein wenig nach oben, und schaust dir Timoschs Post an. 
Zuletzt bearbeitet von Yogu am Mo 07.01.08 18:32, insgesamt 1-mal bearbeitet
|
|
Timosch
      
Beiträge: 1314
Debian Squeeze, Win 7 Prof.
D7 Pers
|
Verfasst: Mo 07.01.08 18:26
Yogu hat folgendes geschrieben: | Du musst noch eine kleine Windows-Versions-Überprüfung einfügen. Im DSDT wird das schön erklärt. |
Erster!
Apollo: Siehe der obere Source, das erledigt der alles.
_________________ If liberty means anything at all, it means the right to tell people what they do not want to hear. - George Orwell
|
|
elundril
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: Mo 07.01.08 18:28
oder wenn du den lustigen dialog von windows selbst haben willst gibts in jedi eine lustige kompo dafür.
lg elundril
_________________ This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
|
|
leseratte18
      
Beiträge: 48
WinXP
Delphi 3.2 Prof. +Delphi 7 Pers. +Delphi 2005 Pers.
|
Verfasst: Mi 16.01.08 17:23
wie stehts mit standby?
_________________ Nach dem "GEH!!!!!!!" kommt H.
|
|