AW: Hibernate und Standby erkennen
In dem Fall ist es gewünscht, da ich gerne ein kleines Log meiner Batterie und Rechnernutzung erstellen würde, um das im Nachhinein auswerten zu können (also ein "Batterie-Benchmark"). Ich aktiviere den Ruhezustand/Standby via Startmenü oder Energiespartaste manuell, in dem Fall greift die Automatik von Windows 7 sowieso nicht. Das aber jedes mal dem Programm von Hand mitzuteilen wäre extrem lästig, deswegen dieser Ansatz.
|
AW: Hibernate und Standby erkennen
Wenn das Programm nur für dich ist, könntest du den Ruhezustand oder Standby über das Programm selbst aufrufen.
Vielleicht mit zwei Desktopverknüpfungen, die mittels Parameter dem Programm sagen, den Log zu starten und den Rechner in den gewünschten Modus zu versetzen. Aber andererseits ist es bestimmt möglich, zu erkennen, welcher Modus aktiv war (vielleicht aus der Ereignisanzeige von Windows?). Wie läuft das eigentlich bei dem hybriden Modus. Wenn mein Laptop in diesem ist, wann entscheidet Windows den Standby aufzugeben und in den Ruhezustand zu wechseln? Wenn die Batterie leer ist oder schon vorher, wenn "abzusehen" ist, dass in nächster Zeit ich das Laptop nicht mehr anschalten werde? Oder ist das erst 3 Tage in der Tasche im Standby und hat dann keine Energie mehr? |
AW: Hibernate und Standby erkennen
hi,
ich verwende folgende kleine freie komponente, mit der kann man auch shutdowns verhindern, aber es hat events für wakeupfromhibernate und wakeupfromstandby... Hier gibts das teil: http://www.delphipages.com/comp/pwrsave-4884.html gruß tom |
AW: Hibernate und Standby erkennen
Hallo,
jetzt habe ich auch das Problem, dass ich Energiesparmodus und Ruhezustand verhindern muss. So funktioniert das leider nicht:
Delphi-Quellcode:
ALle 3 Messages werden gefeuert, aber Msg.Result := BROADCAST_QUERY_DENY bewirkt nichts. Wo ist da der Haken?
procedure TForm1.WMPowerBroadcast(var Msg: TMessage);
var t: TextFile; begin case Msg.wParam of PBT_APMSUSPEND: begin // System wird in einen Energiesparmodus versetzt Msg.Result := BROADCAST_QUERY_DENY; AssignFile(t,'D:\BROADCAST_QUERY_DENY.TXT'); Rewrite(t); WriteLn(t,TimeToStr(Now)+' ==> Msg.wParam.BROADCAST_QUERY_DENY'); CloseFile(t); end; PBT_APMRESUMESUSPEND: begin //System ist wieder aufgewacht ShowMessage('Energiesparmodus: Hurrraaa wir leben wieder'); end; PBT_APMRESUMEAUTOMATIC: begin //Nach dem Aufwachen wurde eine Benutzeraktivität festgestellt ShowMessage('Energiesparmodus: ...und aktiv sind wir auch schon wieder ;-)'); end; end; end; |
AW: Hibernate und Standby erkennen
Ohne es je gemacht zu haben, ich würde sagen so ist es schon zu spät. Da ist die Entscheidung sich schlafen zu legen schon gefallen.
Du musst vorher mit SetThreadExecutionState(..) festlegen dass sich das System bitte nicht schlafen legt bis du es wieder erlaubst. |
AW: Hibernate und Standby erkennen
Ab Vista muss man mit
Delphi-Quellcode:
arbeiten
SetThreadExecutionState
https://msdn.microsoft.com/de-de/lib...(v=vs.85).aspx |
AW: Hibernate und Standby erkennen
Ab WIN7: PowerCreateRequest
|
AW: Hibernate und Standby erkennen
Zitat:
Vielleicht liege ich auch daneben. |
AW: Hibernate und Standby erkennen
Vielen Dank für die Antworten!
Mann oh Mann ist das wieder eine komplizierte Sache. Ich hoffte schon, das (Programmierer-)Leben könnte ausnahmsweise auch mal freundlich zu einem sein. Vielleicht (sehr wahrscheinlich sogar) habe ich mich auch falsch bzw. unvollständig ausgedrückt, denn so richtig "komplett" verhindern will ich Hibernate und Standby nicht. Es geht um folgendes: Vorhanden ist eine MDI-Anwendung die eine Client-Server-Datenbank verwendet. Was machen die Kunden? Sie haben mehrere MDI's geöffnet, und womöglich noch ein modales Fenster, das von einem MDI-Fenster aus geöffnet wurde. Dann ist Mittagspause, und keiner schert sich darum, wenigstens einen laufenden Editiervorgang zu benden, bevor man den Arbeitsplatz verlässt. Da kann man predigen was man will :cyclops: Wenn sie dann von der Mittagspause zurück kommen und der PC ist im Standby....ist natürlich die Verbindung zum DB-Server abgebrochen. Nun kann ich ja nicht bei jedem Editiervorgang oder Fensterwechsel (MDIChildCount > 0) usw. mit SetThreadExecutionState regieren, das wäre overkill. Wenn bei PBT_APMSUSPEND MDIChildCount 0 ist, dann schließe ich einfach die DB-Verbindung und gut isses, aber was tun wenn MDICHildCount > 0 ist, und noch modale Fenster offen sind? Ich denke, da muss ich jetzt ansetzen, weil mit SetThreadExecutionState komme ich wohl nicht weiter. Es sei denn, jemand hätte eine geniale Idee? |
AW: Hibernate und Standby erkennen
Ja gut aber WAS willst du denn machen? Wenn ein MDI-Child offen ist willst du Standby nicht verhindern, aber du willst auch kein Standby haben. :gruebel: Du musst dich für eins entscheiden.
Oder hoffst du auf eine Datenbankverbindung die den Standby überlebt? Keine Ahnung ob sowas geht, aber darauf würde ich nicht wetten. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:22 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