Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Ruhezustand auslösen (https://www.delphipraxis.net/49296-ruhezustand-ausloesen.html)

Zacherl 8. Jul 2005 13:55


Ruhezustand auslösen
 
Hallo,
wie kann man mit Delphi den Ruhezustand auslösen?

Florian

Olli 8. Jul 2005 14:01

Re: Ruhezustand auslösen
 
SetSuspendState(), denke ich?! Das PSDK ist dein Freund!
Alternativ: SetSystemPowerState().

BenjaminH 8. Jul 2005 14:02

Re: Ruhezustand auslösen
 
Vermutlich ShellExecute und dann ShutDown.exe mit irgendwelchen Parametern...
//Ich hätte es davor überprüfen sollen :oops: ShutDown.exe scheint keinen solchen parameterzu haben :-(

Dax 8. Jul 2005 14:03

Re: Ruhezustand auslösen
 
Kuck mal nach MSDN-Library durchsuchenSetSystemPowerState ;)

Benötigt aber (trotz des Nicht-Shutdowns) das SeShutDownPrivilege.

MazeBandit 21. Nov 2005 23:33

Re: Ruhezustand auslösen
 
Hallo erstmal,

ich hab mich heute erst hier eingeloggt, aber dazu gleich mal ne Frage: dieses
Delphi-Quellcode:
setsuspendstate
oder auch das
Delphi-Quellcode:
setsystempowerstate
sind ja so erstmal nciht anwendbar für Delphi 2005... Falls man sie doch direkt einbinden kann (die erforderlichen Rechte für Win XP habe ich bereits festgelegt), würde es mich interessieren, wie ich damit den Ruhezustand und den Standbyzustand für den Rechner erreichen kann.

Habt ihr mal einen Tipp, wie man es effizient in den Quelltext einbinden kann? (bin zwar schon über das 'Hello World' Stadium hinaus, aber noch ein ziemlicher Anfänger...)

Ich freu mich schon auf Antwort,

Maze

Olli 21. Nov 2005 23:44

Re: Ruhezustand auslösen
 
Suche mal nach Hier im Forum suchenEinbinden einer DLL - oder direkt: http://www.delphipraxis.net/internal...ct.php?t=61658

@Dax: Deine Aussage ist so nicht haltbar. Es findet auf Systemebene sowas wie ein Shutdown statt. Daß der Name nicht extra auf die Powerstates eingeht, ist dabei nicht von Bedeutung ;)

faux 22. Nov 2005 05:35

Re: Ruhezustand auslösen
 
Zitat:

Zitat von MazeBandit
dieses setsuspendstate oder auch das setsystempowerstate sind ja so erstmal nciht anwendbar für Delphi 2005...

Wieso nicht?
Ich Tippe einfach
Delphi-Quellcode:
Windows.SetSystemPowerState(True, False);
Wun spätestens nach dem Punkt kommt die Liste, in der auch SetSystemPowerState enthalten ist.
Wenn du das Windows. weglassen willst, musst du Windows in die Uses-Klausel mit aufnehmen, was jedoch meist schon getan ist(außer bei Konsolenanwendungen, etc.).
Hast du überhaupt ein Delphi.Win32 - Projekt erstellt? Also du darfst natürlich kein .NET - Projekt haben. Sonst gehts nicht so.

Grüße
Faux

Dax 22. Nov 2005 06:18

Re: Ruhezustand auslösen
 
Zitat:

Zitat von Olli
@Dax: Deine Aussage ist so nicht haltbar. Es findet auf Systemebene sowas wie ein Shutdown statt. Daß der Name nicht extra auf die Powerstates eingeht, ist dabei nicht von Bedeutung ;)

Entschuldige die Verwirrung :) Auf Systemebene ists ein Shutdown, für den User aber eher Standby, so ist jedenfalls meine Erfahrung ;)

MazeBandit 22. Nov 2005 07:09

Re: Ruhezustand auslösen
 
@faux: erstmal danke für den Tipp, ich hab das Ganze folgendermaßen umgesetzt:

Delphi-Quellcode:
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
(...)

Delphi-Quellcode:
function ExitWin(flag:word): Boolean;
var vi     : TOSVersionInfo;
    hToken : THandle;
    tp     : TTokenPrivileges;
    h      : DWord;
(...)

Delphi-Quellcode:
    OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES,hToken);
    LookupPrivilegeValue(nil,'SeShutdownPrivilege',tp.Privileges[0].Luid);
    tp.PrivilegeCount := 1;
    tp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
    h := 0;
    AdjustTokenPrivileges(hToken,False,tp,0,PTokenPrivileges(nil)^,h);
    CloseHandle(hToken);
(...)

Delphi-Quellcode:
    if flag = 0 then
      result := setsystempowerstate(true,true);
  end
Für das Tool übergebe ich mit flag entweder die Werte für das Herunterfahren, Neustarten etc. oder eben den Wert 0 für Standby und 1 für den Ruhezustand...

Obwohl ich ein Delphi - 32 Projekt gestartet habe (sonst würde ja auch das Herunterfahren nicht funktionieren), kann ich trotzdem weder den Ruhezustand noch den Standbyzustand herbeirufen.

Ist eventuell ein Fehler im Code, den ich aus Betriebsblindheit übersehen habe?

Maze

faux 22. Nov 2005 16:58

Re: Ruhezustand auslösen
 
Gibts einen Syntaxfehler, eine Exception oder tut sich einfach nichts.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:55 Uhr.
Seite 1 von 2  1 2      

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