Feststellen ob PC im Standby-Modus

Anfängerfragen zum Programmieren mit PureBasic.
Ractur
Beiträge: 128
Registriert: 24.06.2008 11:51

Feststellen ob PC im Standby-Modus

Beitrag von Ractur »

Hallo,

gibt es eine Möglichkeit festzustellen ob sich der PC aktuell gerade im Standbymodus befindet oder vor X Sekunden im Standby Modus befand?

Danke!

Grüsse Matthias
Ractur, der mit dem Programmierstil der 80er Jahre :D
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

spezifizier mal genauer, was du mit Standby-Mode meinst.

der Monitor aus, die Pladde aus, oder der Rechner auf "sleep"...

bei letzterem ist der Rechner nämlich eigentlich aus, nur sein Speicherinhalt komplett auf Pladde gemapt.
in dem Zustand läuft dein Program garnicht.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
TomS
Beiträge: 1508
Registriert: 23.12.2005 12:41
Wohnort: München

Beitrag von TomS »

Kaeru Gaman hat geschrieben:bei letzterem ist der Rechner nämlich eigentlich aus, nur sein Speicherinhalt komplett auf Pladde gemapt.
in dem Zustand läuft dein Program garnicht.
StandBy <> Ruhezustand

Deine Aussage trifft auf den Ruhezustand zu.

Im Standbymodus wird alles abgestellt, was nicht gebraucht wird, aber der PC bleibt an, und der Raminhalt bleibt im Ram.
Der PC ist innerhalb weniger Sekunden wieder betriebsbereit, nachdem man den PowerON-Knopf gedrückt hat.

@Topic: Ich denke nicht, dass es möglich ist. Im StandBy-Modus werden alle Aktivitäten aller Programm unterbrochen. Und mitgeloggt wird es auch nicht, wann der PC aus dem StandBy-Modus wieder "erwacht".
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

Falls es für soetwas keine Funktion geben sollte oder solche Ereignisse nirgendwo gespeichert sind (versuchs doch mal mit der Ereignisanzeige in der Systemsteuerung/Computerverwaltung), habe ich hier eine Alternatividee:

Während des StandBy-Modus kann ein Programm nicht weiterlaufen. Man könnte also in einer Schleife permanent mit Date() prüfen, ob sich der PC im StandBy-Modus befand.
Date() ist sekundengenau, prüft man also zwei Mal hintereinander mit Date() und die Differenz zwischen diesen beiden Werten ist größer als 1 Sekunde, lag ein StandBy-Modus vor. Diese Methode würde auch für den Ruhezustand funktionieren.

ElapsedMilliseconds() würde ich nicht nehmen, da dieser Wert vermutlich auch über einen StandBy oder Ruhezustand hinweg "lückenlose" Zeitwerte gibt. Ob diese Aussage stimmt, habe ich aber jetzt nicht getestet.
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

@TomS
yo mir war jetzt nicht bewußt, dass er zwischen "Monitor und Platte aus" und "Sleep" noch ein "Standby" gibt...
gabs das bei w2000 auch schon?

@AND
gar nicht mal schlecht, die idee.
... ich schätze, dass Ems auch einen korrekten, ununterbrochenen Wert liefert.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
TomS
Beiträge: 1508
Registriert: 23.12.2005 12:41
Wohnort: München

Beitrag von TomS »

@Kaeru: keine Ahnung. Ich bin von Win98 direkt auf XP umgestiegen. Und dieses Monitor und Platte aus ist StandBy. Es gibt nur StandBy und Hibernate. Da hab wohl eher ich dich missverstanden, als andersrum, weil ich dachte du meinst StandBy is das Selbe wie Sleep, oder so :roll:
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

> Und dieses Monitor und Platte aus ist StandBy.
nicht ganz...

ich hab in den energiesparoptionen drei Einstellungen.
Monitor aus, Platte aus und Standby.

übrigens kann ich Standby nicht mit der (usb) Maus unterbrechen, die anderen beiden schon.

hab jetzt einen test gemacht: Eml wird auch fortgezählt.

... ich hab jetzt allerdings nicht getestet, ob das prog wirklich unterbrochen wird, ist aber anzunehmen.

ich modifizier den code nochmal und teste das auch.
hab jetzt eh nochwas zu tun, da kann der rechner noch ne halbe stunde standby stehen... xD
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
TomS
Beiträge: 1508
Registriert: 23.12.2005 12:41
Wohnort: München

Beitrag von TomS »

Das mit den Energieoptionen ist wieder was anderes.
Dein Monitor geht nach 15 Minuten aus und eine Platte nach 30 (je nachdem, was du eingestellt hast). Damit hab ich mich gar nicht befasst, da ich es gleich abgestellt habe (wie soll man denn bei dem Schmarrn ne DVD anschauen können -_-). Ich meinte eigentlich den Punkt im Herunterfahren-Menü. Und das im StandBy Monitor und Platte abgeschaltet werden, bei Platte abschalten nach X minuten, aber nicht in den StandBy-Zustand übergegangen wird, ist wieder was anderes... Kompliziert, kompliziert, das Energiesparen mit einem PC.

StandBy mit der Maus unterbrechen wär auch nicht sonderlich sinnvoll. Stell dir mal vor, dein Fernseher geht an, wenn du deine Fernbedienung von der Couch auf irgendein Regal legst xD
Benutzeravatar
rolaf
Beiträge: 3843
Registriert: 10.03.2005 14:01

Beitrag von rolaf »

Ein schlaues DVD-Abspielprogramm deaktiviert deshalb (während ein Film läuft) die Energiesparoptionen. :allright:
:::: WIN 10 :: PB 5.73 :: (x64) ::::
Ractur
Beiträge: 128
Registriert: 24.06.2008 11:51

Beitrag von Ractur »

Hallo,

danke an alle! Also ich meinte den Ruhezustand, da wo Fesplatte ausgeht, Monitor etc... und dann der PC quasi fast ausgeschaltet ist.
AND51 hat geschrieben: Während des StandBy-Modus kann ein Programm nicht weiterlaufen. Man könnte also in einer Schleife permanent mit Date() prüfen, ob sich der PC im StandBy-Modus befand.
Date() ist sekundengenau, prüft man also zwei Mal hintereinander mit Date() und die Differenz zwischen diesen beiden Werten ist größer als 1 Sekunde, lag ein StandBy-Modus vor. Diese Methode würde auch für den Ruhezustand funktionieren.

Diese Idee finde ich sehr gut ^^ Ich hab mal was gemacht, die "Schleife" wird alle Sekunde einmal durchlaufen [WaitWindowEvent(1000)]

Code: Alles auswählen


a = a+1

If a = 1
first = Date()
EndIf

If a = 2
second = Date()
a = 0
EndIf


;Debug a
;Debug first
;Debug second

If first < second
finish = second - first
Else
finish = first - second
EndIf

If finish > 2
Aktion PC war im Standby
EndIf
Wäre das so richtig oder habe ich gerade einen Denkfehler? Da die "Schleife" einmal durchlaufen wird pro Sekunde, wird ein Wert ermittelt werden bevor der PC in den Standby fältt. Kommt der PC aus dem Standby wird wieder ein Wert ermittelt welcher diesmal wesentlich höher sein wird. Hmm ja, ich denke das wird so funktionieren, ich werds mal probieren ^^ ;)

Danke, Matthias
Ractur, der mit dem Programmierstil der 80er Jahre :D
Antworten