AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Auf Standby/Ruhezustand überprüfen
Thema durchsuchen
Ansicht
Themen-Optionen

Auf Standby/Ruhezustand überprüfen

Ein Thema von TurboMartin · begonnen am 20. Jul 2006 · letzter Beitrag vom 8. Jun 2009
Antwort Antwort
TurboMartin

Registriert seit: 13. Feb 2006
Ort: Bad Honnef
765 Beiträge
 
Turbo Delphi für Win32
 
#1

Auf Standby/Ruhezustand überprüfen

  Alt 20. Jul 2006, 11:13
Hi DP,
ich möchte gerne meinen PC automatisch um 22 Uhr abends mit einem Programm ausschalten.
Dazu wollte ich dann erst schauen, ob der Ruhezustand oder Standby läuft, oder nur der Bildschirm automatisch ausgeschaltet wurde,
um zu sehen, ob noch jemand daran arbeitet oder ob er unbenutzt ist und somit ausgeschaltet werden kann,
da es in dem 2. Stock, wo der PC steht nach längerer Laufzeit um die 40°C sind!!
Tomorrow will be cancelled due to lack of interest.

  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

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

Re: Auf Standby/Ruhezustand überprüfen

  Alt 20. Jul 2006, 12:07
Du kannst mit MSDN-Library durchsuchenGetLastInputInfo die sekundem seit dem letzten Event bestimmen, ich würde dann soetwas machen wie:

Code:
if (zeit später als 22 Uhr) and (GetLastInputInfo mehr als 5 Minuten) then
        ausschalten;
else
        FunktionAufrufenIn(später(22Uhr, 5Minuten - GetLastInputInfo));
Ich mag Pseudocode
  Mit Zitat antworten Zitat
Benutzerbild von H4ndy
H4ndy

Registriert seit: 28. Jun 2003
Ort: Chemnitz
515 Beiträge
 
Delphi XE3 Professional
 
#3

Re: Auf Standby/Ruhezustand überprüfen

  Alt 20. Jul 2006, 12:59
Du kannst nicht prüfen, ob gerade der Standby oder Ruhezustand an ist, da dein Programm in dieser Zeit "lahmgelegt" ist

Du kannst aber reagieren, wenn der PC in einen dieser Modi wechselt.
Dazu einfach folgende Funktion zum Formular hinzufügen:
Delphi-Quellcode:
type Form1...
public
procedure WndProc(var MyMessage: TMessage); override;
...
Und so dann aufbauen:
Delphi-Quellcode:
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.

  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
 end;
  end;
  inherited WndProc(MyMessage);
end;
Falls die Konstanten fehlen:
Delphi-Quellcode:
PBT_APMQUERYSUSPEND = $0000;
PBT_APMQUERYSTANDBY = $0001;

PBT_APMQUERYSUSPENDFAILED = $0002;
PBT_APMQUERYSTANDBYFAILED = $0003;

PBT_APMSUSPEND = $0004;
PBT_APMSTANDBY = $0005;

PBT_APMRESUMECRITICAL = $0006;
PBT_APMRESUMESUSPEND = $0007;
PBT_APMRESUMESTANDBY = $0008;

PBTF_APMRESUMEFROMFAILURE = $00000001;

PBT_APMBATTERYLOW = $0009;
PBT_APMPOWERSTATUSCHANGE = $000A;

PBT_APMOEMEVENT = $000B;
PBT_APMRESUMEAUTOMATIC = $0012;
Manuel
  Mit Zitat antworten Zitat
JacK_Silent

Registriert seit: 29. Mai 2006
3 Beiträge
 
#4

Re: Auf Standby/Ruhezustand überprüfen

  Alt 16. Nov 2007, 22:04
Hey,

bei mir kommt ein Fehler beim kompilieren:

"WndProc nicht in Basisklasse gefunden"

Ich verwende keine normale "Form" sondern ein WindowsDienst also einen "Service" gibts, ne möglichkeit den Ruhezustand trotzdem abzufragen?
  Mit Zitat antworten Zitat
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.272 Beiträge
 
Delphi 10.4 Sydney
 
#5

Re: Auf Standby/Ruhezustand überprüfen

  Alt 8. Jun 2009, 12:06
Ich hole dieses alte Thema mal wieder hoch da ich gerade an einem ähnlichen Problem arbeite. Folgendes Szenario: In meinem Prog prüft ein Timer alle 5 Minuten eine Netzwerkresource. Im Fehlerfall wird das Programm beendet oder eine Meldung ausgegeben (je nach Fehlerursache).

Auf manchen Rechnern (vorrangig Laptops) kommt es vor, daß die im Standby (nicht Suspend-to-Disk sondern nur Standby) sind. Man möchte meinen, die Programme würden nun ebenfalls schlafen aber dem ist nicht so. Denn weckt man das System aus dem Standby auf, dann habe ich im Fehlerlog eine fehlgeschlagene Netzprüfung zu einem Zeitpunkt als das System im Standby war. Scheinbar laufen die Programme auf Sparflamme weiter, abgeschaltet wird nur der Systembus wo z.B. auch die Netzwerkkarte dran hängt.

Das scheint ein Feature zu sein das eingeführt wurde um Rechner softwaregesteuert aus dem Standby zu holen. Scheinbar ist das auf manchen Laptops so gelöst daß einige Aufweckfunktionen über den Treiber gesteuert werden (bisher so entdeckt bei einigen Acer Travelmate und Fujitsu Siemens Lifebook C- und E-Serie)

Jetzt ist doch die Frage: Wenn Programme auf eine bestehende Netzverbindung setzen und das System im Standby die Netzwerkkarten abschaltet ohne die betreffenden Anwendungen schlafen zu schicken, dann gibt das Kuddelmuddel. Winamp z.B. scheint da auch über dieses Problem zu stolpern wenn man einen Laptop mit laufendem Shoutcast in den Standby schickt. Wenn Anwendungen weiter laufen im Standby, dann müßte man doch auch abfragen können, ob der Rechner gerade im Standby ist oder nicht und die Peripherie-abhängigen Routinen entsprechend absichern.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#6

Re: Auf Standby/Ruhezustand überprüfen

  Alt 8. Jun 2009, 13:06
im Standby/Ruhezustand schlafen deine Programme definitiv ... im Ruhezustannd ist der PC/Laptop sogar richtig abgeschaltet.

Wenn dein Programm also "wärend der Zeit" noch aktiv war, dann handelt es ich nicht um eines der beiden "Schlafarten".

Eventuell gibt es bei deinem Laptop eine Sparfunktion, wo nur der Bildshirm und eventuell noch andere Komponenten abgeschaltet werden und der Rest auf Sparflamme läuft (gibt es ja öfters)


Du könntest ja mal alle "globalen" Windowsnachrichten mitloggen und schauen ob Windows eventuell irgendwelche "Warnungen"/Nachrichten rausschickt, wenn/bevor es den PC etwas/teilweise runterfährt.


Aber du solltest doch eh eine absicherung drin haben,
oder was passiert, wenn mal wer einfach nur das Netzwerkkabel abzieht?
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Auf Standby/Ruhezustand überprüfen

  Alt 8. Jun 2009, 13:13
Das passt jetzt nicht direkt hier her, aber Windows selbst hat im Standby-Modus einige Dienste/Prozesse laufen. Ob das bei eigenen Anwendungen so ist, weiß ich nicht, könnte es mir aber vorstellen.

Wenn ich meinen Laptop in den Standby-Modus versetze, dann kehrt er nach genau einer Stunde wieder zurück und fährt in den Ruhezustand (HDD + TFT gehen an und man sieht den Ruhezustandsfortschritt von Windows). Also irgendwas muss da schon aktiv sein.

Grüße, Matze
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Auf Standby/Ruhezustand überprüfen

  Alt 8. Jun 2009, 13:15
Im Standby-Modus ist der Rechner nicht aus. Es wird nur nicht benötigte Hardware abgeschalten und der Prozessor gedrosselt
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#9

Re: Auf Standby/Ruhezustand überprüfen

  Alt 8. Jun 2009, 13:24
aus geht er da nicht, aber ich denk/dachte, daß da alles abgeschaltet wird, außer eben der RAM und ein paar andere Dinge

nja, wollt grad mal ausprobieren und hab mir ein neues Programm erstellt, was da über 'nen Timer, in einem Label eine Zahl sekündlich erhöht und wollte dann in den Standby ... nja, bis mir einfiehl, daß ich auf meinem Heimrechner das Standby deaktiviert hab und es ja garnicht testen kann ... also PC in Standby, 'nen Minütchen warten und danach mal nachsehn, wie die Zahl im Label nun aussieht, im Vergleich vor'm Standby.

Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Label1.Caption := IntToStr(StrToIntDef(Label1.Caption, 0) + 1);
end;
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.272 Beiträge
 
Delphi 10.4 Sydney
 
#10

Re: Auf Standby/Ruhezustand überprüfen

  Alt 8. Jun 2009, 19:19
Was ich sagen wollte ist, daß Laptops anscheinend nochmal ein eigenes Süppchen kochen beim Standby. Die obige Testroutine bringt auf verschiedenen Rechnern verschiedene Ergebnisse. Auf allen PCs die ich testen konnte läuft das Label nicht hoch, ebenso auf einigen Laptops. Allerdings, auf dem besagten Travelmate und zwei FSC E-Serien läuft es hoch.

Daher die Frage: Kann man diesen "Fast-ein-richtiges-Standby"-Zustand abfragen während dieser Zustand aktiv ist, da die Anwendung ja definitiv läuft? Auf allen anderen Rechnern würde die Bedingung ja nie erfüllt bzw. die Anwendung ist nicht in der Lage die Abfrage durchzuführen, also kein Problem.

Ansonsten, der obige Tip mit den Messages abfangen beim In-den-Standby-fahren funktioniert auch gut.
  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 06:20 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