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 Hochfahren nach Ruhezustand erkennen (https://www.delphipraxis.net/56594-hochfahren-nach-ruhezustand-erkennen.html)

Gydan 8. Nov 2005 14:05


Hochfahren nach Ruhezustand erkennen
 
Gibt es eine Möglichkeit, dass ein Delphi-Programm erkennt, wenn Windows XP wieder aus dem Ruhezustand hochgefahren wurde?

gmarts 8. Nov 2005 14:47

Re: Hochfahren nach Ruhezustand erkennen
 
Wurde das Delphiprogramm denn mit in den Ruhezustand gebracht? Wenn ja, dann weise doch einer Variablen einen bestimmten Wert zu, dieser müsste dann der gleiche bleiben. Wird der Rechner ganz neugestartet, wäre dieser Wert weg.

Gydan 8. Nov 2005 14:51

Re: Hochfahren nach Ruhezustand erkennen
 
Ja, das Programm läuft natürlich, wenn Windows in den Ruhezustand gefahren wird. Aber der Inhalt einer Variablen ist natürlich nach dem Ruhezustand noch da, das ist ja der Trick beim Ruhezustand, sonst würd danach doch kein Programm mehr funktionieren.

Ich dachte eher an so etwas wie eine Nachricht, die von Windows nach dem Ruhezustand an alle Programme gesendet wird, auf die man reagieren kann. So wie auf einen Button-Klick.

gmarts 8. Nov 2005 15:26

Re: Hochfahren nach Ruhezustand erkennen
 
ähhh...mhhh...stimmt.....das Progamm merkt ja garnicht, wann es feststellen soll, daß die Variable gleich geblieben ist. :mrgreen:
*sollte nicht so viel Kaffee trinken*

BKempf 8. Nov 2005 16:11

Re: Hochfahren nach Ruhezustand erkennen
 
Zitat:

Zitat von gmarts
ähhh...mhhh...stimmt.....das Progamm merkt ja garnicht, wann es feststellen soll, daß die Variable gleich geblieben ist. :mrgreen:

Aber es könnte bemerken, wenn "plötzlich" mehrere Stunden vergangen sind.
Dann gibt es allerdings das Problem, daß eine Zeitumstellung erkannt werden muß.

Gydan 8. Nov 2005 16:19

Re: Hochfahren nach Ruhezustand erkennen
 
Ja, ich habs bis jetzt mit der Zeit gemacht, nur ich dachte, vielleicht gibt es eine "professionelere" Lösung.

Flocke 8. Nov 2005 16:40

Re: Hochfahren nach Ruhezustand erkennen
 
Schau die mal die Doku zu MSDN-Library durchsuchenWM_POWERBROADCAST an - müsstest du dir nur 'nen Message-Handler für schreiben.

Sharky 8. Nov 2005 16:54

Re: Hochfahren nach Ruhezustand erkennen
 
Zitat:

Zitat von Flocke
Schau die mal die Doku zu MSDN-Library durchsuchenWM_POWERBROADCAST an - müsstest du dir nur 'nen Message-Handler für schreiben.

Und bei der Headerübersetzung der Jedis für die WIN32 Api sind in der JwaPbt.pas die Konstanten zu finden.

Gydan 8. Nov 2005 17:46

Re: Hochfahren nach Ruhezustand erkennen
 
Delphi-Quellcode:
procedure TForm1.WMPowerBroadcast(var Msg: TWMPower);
begin
  showmessage('1. Msg.PowerEvt: '+ inttostr( Msg.PowerEvt )+chr(13)+'Msg.Msg= '+inttostr(msg.msg) +chr(13)+'Msg.Unused: '+inttostr(msg.unused));
  if Msg.PowerEvt=PWR_SUSPENDRESUME then
  showmessage('Fortgesetzt');
end;
Das ist mein Versuch bis jetzt. PWR_SUSPENDRESUME hat den Wert 2, aber ich bekomme für Msg.PowerEvt nur die Werte 0 und 4 beim Ruhezustand einschalten und die Werte 18 und 7 beim Hochfahren aus dem Ruhezustand. Die Werte sind beim Suspend die gleichen. Die Prozedur wird also vor und nach dem Ruhezustand/Suspend aufgerufen, aber das mit dem Werten klappt nicht. Dabei wird die Prozedur wohl zwei mal aufgerufen, da ich zweimal Meldungen mit Werten erhalte. Kann mir da jemand helfen? Ich hatte gehofft, es wäre einfacher.

Kannst du mir das mit den Jedis erklären? Ich hab davon leider keine Ahnung.

Flocke 8. Nov 2005 17:58

Re: Hochfahren nach Ruhezustand erkennen
 
TWMPower ist für WM_POWER, nicht für WM_POWERBROADCAST - nimm lieber einfach TMessage.

Laut PSDK kann wParam die folgenden Werte haben:
Zitat:

Zitat von PSDK
Code:
[b]Event                     Meaning[/b]
PBT_APMBATTERYLOW         Battery power is low.
PBT_APMOEMEVENT           OEM-defined event occurred.
PBT_APMPOWERSTATUSCHANGE  Power status has changed.
PBT_APMQUERYSUSPEND       Request for permission to suspend.
PBT_APMQUERYSUSPENDFAILED Suspension request denied.
PBT_APMRESUMEAUTOMATIC    Operation resuming automatically after event.
PBT_APMRESUMECRITICAL     Operation resuming after critical suspension.
PBT_APMRESUMESUSPEND      Operation resuming after suspension.
PBT_APMSUSPEND            System is suspending operation.

Prüfe mal auf diese Werte.

Außerdem solltest du Msg.Result auf TRUE setzen, um das Suspend zu erlauben.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:14 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