Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi OnBefore Standby -> aktion ausführen mit Vista SP1 (https://www.delphipraxis.net/118903-onbefore-standby-aktion-ausfuehren-mit-vista-sp1.html)

mittelhirn 17. Aug 2008 18:25


OnBefore Standby -> aktion ausführen mit Vista SP1
 
hi all,

Delphi-Quellcode:
type
  TForm1 = class(TForm)
  procedure WndProc(var MyMessage: TMessage); override;


.....

procedure TForm1.WndProc(var MyMessage: TMessage);
begin
if MyMessage.Msg = WM_POWERBROADCAST then begin
// windows powermanagement message
if (MyMessage.WParam = PBT_APMQUERYSUSPEND) or
(MyMessage.WParam = PBT_APMQUERYSTANDBY)
then begin
  // Hier hin, was getan werden muss, bevor Windows in den Standby darf,
  // z.B. Netzwerk- oder Datenbankverbindungen trennen, Timer abstellen, etc.
  ShowMessage('Bin mal weg');
  MyMessage.Result := 1; // allow standby/hibernation
  //MyMessage.Result := BROADCAST_QUERY_DENY; // deny standby/hibernation

end else if (MyMessage.WParam = PBT_APMRESUMECRITICAL) or
(MyMessage.WParam = PBT_APMRESUMESUSPEND) or
(MyMessage.WParam = PBT_APMRESUMESTANDBY)
then begin
  // Hier z.B. Verbindungen wiederherstellen
  ShowMessage('Wieder da ;)');
end;
  end;
  inherited WndProc(MyMessage);
end;


Dieser Code funktioniert meines Wissens nicht mehr auf aktuellem Vista SP1 ...
Ich möchte wenn ein User in Standby geht vorher aktionen durchführen also z.b. StandbyEvent -> CloseProgramm -> ExecuteStandby.
Das funktioniert so nicht.
Nur der 'Nach WakeUp' Code funktioniert ?

//add:Zudem würde ich gerne das Standby verhindern unter Vista


Kann mir da jemand auf sie Sprünge helfen was sich in Vista geändert hat und wie ich das erreichen kann ?

Thanx

jfheins 17. Aug 2008 20:39

Re: OnBefore Standby -> aktion ausführen mit Vista SP1
 
Mit Bei Google suchenPBT_APMQUERYSTANDBY vista habe ich das hier gefunden:

http://forums.microsoft.com/MSDN/Sho...17593&SiteID=1

Anscheinend musst du es "vorher sagen" wenn der User nicht in den Standby gehen darf ...
bzw. du wirst nur noch benachrichtigt, und nicht mehr gefragt.

mittelhirn 18. Aug 2008 17:04

Re: OnBefore Standby -> aktion ausführen mit Vista SP1
 
So nach eingem lesen ist es wohl so, dass M$ das verhindern eines vom User veranlassten Standby
entfernt hat ;( Der Anwendung bleiben 2sec - in worten zwei Sekunden :shock: - um noch ausstehende
tasks zu erledigen.

Alles was ich gefunden habe wie SetThreadExecutionState, BlockReasonCreate etc. verhindert kein Standby
Dem oben angeführten Beispiel bleibt zu wenig Zeit etwas zu erledigen -> erst nach WakeUp wird der code ausgeführt.


Fällt vielleicht irgendjemanden was ein, wie man mein Anliegen doch bewerkstelligen kann ?
Also bei einem von User initierten Standby oder einem vom OS initierten Standby diesen verzögern/verhindern
um noch was zu erledigen ?

thanx

OregonGhost 18. Aug 2008 17:52

Re: OnBefore Standby -> aktion ausführen mit Vista SP1
 
Nun, Microsoft hat das nicht aus Jux und Tollerei geändert, sondern weil es Programme gab, die damit Schindluder trieben. Warum musst du unbedingt darauf reagieren? Ich meine, die Welt geht doch nicht unter, das Leben geht nach dem Aufwachen aus dem Standby bzw. dem Ruhezustand doch ganz normal weiter. Der Benutzer will möglicherweise mit Absicht den Standby herbeiführen (oder das OS macht es, weil der Akku fast leer ist). Das zu verzögern kann so gesehen fatale Folgen haben.
Dauert denn das Trennen deiner Verbindungen oder was immer du machst so lange? Was muss da gemacht werden? Reicht das Trennen der Verbindungen durch Windows nicht aus? Anders gefragt, warum musst du ständig diese Verbindungen offenhalten, wenn ein Standby des Systems ein normaler Vorgang ist (und es somit nicht um die Verfügbarkeit gehen kann)?

Andererseits, was ich bei mir immer beobachten kann: Das Herunterfahren dauert seine Zeit, und ein blockierendes Programm wird erst dann wirklich geschlossen (bzw. wenn es in einem modalen Dialog hängt, die Liste mit den das Herunterfahren verhindernden Programmen angezeigt), nachdem die anderen Programme einigermaßen durch sind. Vielleicht hilft es dir daher, wenn du einen modalen Dialog anzeigst.

Wenn ein verfrühter Standby tatsächlich kritisch für deine Anwendung ist und diese von hinreichender Wichtigkeit ist, kannst du natürlich auch als Systemvoraussetzung einen nicht aktivierten Standby-Modus verlangen.

mittelhirn 18. Aug 2008 18:07

Re: OnBefore Standby -> aktion ausführen mit Vista SP1
 
Zitat:

Zitat von OregonGhost
Nun, Microsoft hat das nicht aus Jux und Tollerei geändert ....

Das ist mir schon klar .. Ich will explizit ein programm killen, dass nach wakeup probleme macht und es dann wieder starten !


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