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. ;-) |
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 |
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. |
Re: Rechner soll an bleiben nach Aufwachen mit WaitableTimer
Keiner eine Idee?
|
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:
ich denke das sollte alles ziemlich klar sein, hoff ich hab dir geholfen :-) hab selbst ewig danach gesucht
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; Gruß Cylence |
Re: Rechner soll an bleiben nach Aufwachen mit WaitableTimer
Zitat:
Zitat:
|
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. |
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.
|
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"... |
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. |
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