AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi OnBefore Standby -> aktion ausführen mit Vista SP1
Thema durchsuchen
Ansicht
Themen-Optionen

OnBefore Standby -> aktion ausführen mit Vista SP1

Ein Thema von mittelhirn · begonnen am 17. Aug 2008 · letzter Beitrag vom 18. Aug 2008
Antwort Antwort
mittelhirn

Registriert seit: 9. Feb 2007
6 Beiträge
 
#1

OnBefore Standby -> aktion ausführen mit Vista SP1

  Alt 17. Aug 2008, 19:25
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
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#2

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

  Alt 17. Aug 2008, 21:39
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.
  Mit Zitat antworten Zitat
mittelhirn

Registriert seit: 9. Feb 2007
6 Beiträge
 
#3

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

  Alt 18. Aug 2008, 18:04
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
  Mit Zitat antworten Zitat
OregonGhost

Registriert seit: 8. Jun 2002
Ort: Lübeck
1.216 Beiträge
 
Delphi 3 Professional
 
#4

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

  Alt 18. Aug 2008, 18:52
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.
Oregon Ghost
---
Wenn NULL besonders groß ist, ist es fast schon wie ein bisschen eins.
  Mit Zitat antworten Zitat
mittelhirn

Registriert seit: 9. Feb 2007
6 Beiträge
 
#5

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

  Alt 18. Aug 2008, 19:07
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 !
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:24 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