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 Rechner soll an bleiben nach Aufwachen mit WaitableTimer (https://www.delphipraxis.net/148741-rechner-soll-bleiben-nach-aufwachen-mit-waitabletimer.html)

kriegste 7. Mär 2010 16:29


Rechner soll an bleiben nach Aufwachen mit WaitableTimer
 
Hallo,

ich lasse meinen PC in den Standby-Modus entschlummern und setze vorher einen WaitableTimer, um ihn zu einem bestimmten Zeitpunkt wieder aufzuwecken. Das klappt auch, allerdings nur bis zu diesem Punkt. Erfolgt keine Benutzer-Interaktion (Tastendruck, Mausbewegung/-klick), fällt Windows (sowohl XP als auch 7) nach etwa drei Minuten wieder zurück in den Standby-Modus. Der Rechner soll aber laufen, und zwar so, wie vor dem Einschlafen, wo er ja auch nicht automatisch einschläft (ohne zutun meines Programms).

Wie kriege ich das korrekte Verhalten hin?

SetThreadExecutionState(ES_SYSTEM_REQUIRED or ES_CONTINUOUS);
ist aus verschiedenen Gründen keine Lösung

Simulieren eines Tastendrucks oder einer Mausbewegung per keybd_event oder mouse_event brachten leider keine Änderung.

Danke für eure Hilfe. ;-)

himitsu 7. Mär 2010 16:39

Re: Rechner soll an bleiben nach Aufwachen mit WaitableTimer
 
Was sollen das denn für verschiedene Gründe sein?

http://www.delphipraxis.net/internal...103893#1103893

kriegste 7. Mär 2010 16:47

Re: Rechner soll an bleiben nach Aufwachen mit WaitableTimer
 
Naja, es soll alles automatisch funktionieren. Wenn ich SetThreadExecutionState(ES_SYSTEM_REQUIRED or ES_CONTINUOUS) verwende, darf sich das Programm nicht automatisch beenden. Sondern jemand muss es von Hand schließen (da sonst der Rechner wieder herunterfährt).

Lässt man das Programm unbeendet im Hintergrund, wundert man sich, warum der PC gar nicht mehr in den Standbymodus will.

kriegste 8. Mär 2010 22:44

Re: Rechner soll an bleiben nach Aufwachen mit WaitableTimer
 
Keiner eine Idee?

Cylence 9. Mär 2010 07:34

Re: Rechner soll an bleiben nach Aufwachen mit WaitableTimer
 
Hi,

ich hab das auch, kommt nur nicht bei allen Systemen vor, aber ich habs so gelöst, jetzt ist mein PC mein Wecker :-)

Delphi-Quellcode:
public
  procedure WMPowerBroadcast(var MyMessage: TMessage); message WM_POWERBROADCAST;

.
.
.



procedure TMRMaster.WMPowerBroadcast(var MyMessage: TMessage);
begin
  if MyMessage.Msg = WM_POWERBROADCAST then begin
    if (MyMessage.WParam = PBT_APMQUERYSUSPEND) or (MyMessage.WParam = PBT_APMQUERYSTANDBY)
    then begin
      // windows wants to go into standby or hibernation mode
      // Hier hin, was getan werden muss, bevor Windows in den Standby darf,
      // z.B. Netzwerk- oder Datenbankverbindungen trennen, Timer abstellen, etc.  
               

      MyMessage.Result := 1;                          // allow standby/hibernation
      // MyMessage.Result := BROADCAST_QUERY_DENY;    // deny standby/hibernation  
    end else if (MyMessage.WParam = PBT_APMRESUMEAUTOMATIC) or (MyMessage.WParam = PBT_APMRESUMECRITICAL) or
                (MyMessage.WParam = PBT_APMRESUMESUSPEND) or (MyMessage.WParam = PBT_APMRESUMESTANDBY)
    then begin
      // windows returns from standby or hibernation
      // Hier z.B. Verbindungen wiederherstellen
      // und Windows sagen das es benötigt wird und sich nicht automatisch ohne Usereingabe wieder ausschaltet
      SetThreadExecutionState(ES_DISPLAY_REQUIRED or ES_SYSTEM_REQUIRED or ES_CONTINUOUS);
      CancelWaitableTimer(htimer);

    end;
  end;
end;
ich denke das sollte alles ziemlich klar sein, hoff ich hab dir geholfen :-) hab selbst ewig danach gesucht

Gruß

Cylence

himitsu 9. Mär 2010 07:35

Re: Rechner soll an bleiben nach Aufwachen mit WaitableTimer
 
Zitat:

Zitat von kriegste
darf sich das Programm nicht automatisch beenden. Sondern jemand muss es von Hand schließen (da sonst der Rechner wieder herunterfährt).

Wenn dein Programm aus ist, warum darf dann der PC nicht in den Standby?

Zitat:

Zitat von kriegste
Lässt man das Programm unbeendet im Hintergrund, wundert man sich, warum der PC gar nicht mehr in den Standbymodus will.

Wenn dein Programm fertig mit der Aktion ist, bzw. es ihm egal ist, wenn ob der PC in den Stndby geht, dann setzt es halt den Status von SetThreadExecutionState wieder auf normal zurück.

kriegste 9. Mär 2010 11:03

Re: Rechner soll an bleiben nach Aufwachen mit WaitableTimer
 
@Cylence

Das ist genau die Lösung, die den PC blockiert...

Mein Programm ist nur der Wecker. Der Grund, warum der PC an gehen soll, sind andere Programme. Mein Programm soll weiterlaufen und keine Interaktion benötigen. Trotzdem soll der PC a) nicht herunterfahren, wenn er geweckt wurde und noch niemand die Maus bewegt hat und b) aber trotzdem vom Benutzer in den Standby geschickt werden können, ohne, das mein Programm das blockiert.

himitsu 9. Mär 2010 11:09

Re: Rechner soll an bleiben nach Aufwachen mit WaitableTimer
 
Dann schalte das Timeout für den automatischen Standby ab und laß dein Programm nichts machen.

kriegste 9. Mär 2010 11:18

Re: Rechner soll an bleiben nach Aufwachen mit WaitableTimer
 
Und genau das war meine Frage. Wie verstelle ich den Timeout für den automatischen Standby? :mrgreen:

PS: Und ich meine natürlich nicht den in der Systemsteuerung. Der steht schon auf "Nie"...

Cylence 9. Mär 2010 12:09

Re: Rechner soll an bleiben nach Aufwachen mit WaitableTimer
 
Hi,

also mein Programm in dem das so eingebaut ist, verhindert nicht im geringsten den Ruhezustand nach dem wiederhochfahren mit automatischem Timer. Nur das automatische Wieder runterfahren ohne mausbewegung vom user wird verhindert, danach kann der user immer noch wie gewohnt Ruhezustand oder Standby machen, genauso auch aus meinem Programm geht ruhezustand und Standby. Daher denke ich dein problem kommt nicht von der funktion her. Weil bei mir klappt das ja so ohne Probleme.

Gruß

Cylence


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