Feststellen ob PC im Standby-Modus

Anfängerfragen zum Programmieren mit PureBasic.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

also, mit Ems funzt das auch, habs extra mal getestet, hiermit:

Code: Alles auswählen

EnableExplicit
Define EvID
Define GdID
Define EXIT
Define Timer
Define Counter
Define Disptext$

#PB_Event_NONE = 0

#Window = 0
#Button = 0
#TextGd = 1

OpenWindow( #Window, #PB_Ignore, #PB_Ignore, 256, 192, "Standby Test")
CreateGadgetList( WindowID(#Window))
  ButtonGadget(#Button, 32, 112, 192, 48, "Show Ems")
  TextGadget( #TextGd, 32,32, 192, 48, "Ems", #PB_Text_Center | #PB_Text_Border )

Timer = ElapsedMilliseconds()
Counter = 0

Repeat
  EvID = WaitWindowEvent( 100 )
  GdID = EventGadget()

  Select EvID
    Case #PB_Event_Gadget
      Select GdID
        Case #Button
          Disptext$ = "Ems: " + StrF(( ElapsedMilliseconds() - Timer ) / 1000, 3) + #CRLF$
          Disptext$ + "Counter: " + Str( Counter )
          SetGadgetText( #TextGd, Disptext$ )
      EndSelect
    Case #PB_Event_NONE
      Counter +1
    Case #PB_Event_CloseWindow
      EXIT = 1
  EndSelect

Until EXIT
auch im standby stoppt das programm aber die Uhr läuft weiter.

die beiden werte kann man auch dementsprechend vergleichen, um den standby festzustellen.
dürfte btw für den Hibernate / Sleep genauso funktionieren.


> Ich meinte eigentlich den Punkt im Herunterfahren-Menü.
ach, da ist das auch nochmal....
> Das mit den Energieoptionen ist wieder was anderes.
das kannst du aber auch mit timer automatisch aufrufen lassen, in den Energiesparoptionen einstellbar.

> wie soll man denn bei dem Schmarrn ne DVD anschauen können
mit unterschiedlichen profilen!
ich habe im profil "Desktop" eingestellt, dass man Monitor nach 1 oder 2 min ausgeht.
das ist praktisch, denn wenn ich daddel halte ich kaum 2min die finger still.
und das profil "Präsentation" schaltet niemals irgendetwas aus, das ist zum film gucken.
und umschalten kann ich das im systray, einfach rechtsclick auf das steckersymbol... ;)
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag von Fluid Byte »

Mit diesem Code kannst du festellen wann der StandyBy Modus anfängt und wieder beendet wird.

Code: Alles auswählen

#PBT_APMRESUMESUSPEND = $0007	; Operation resuming after suspension. 
#PBT_APMSUSPEND = $0004			; System is suspending operation.

OpenWindow(0,0,0,320,240,"void",#PB_Window_SystemMenu | #PB_Window_ScreenCentered)

Procedure WindowCallback(hWnd,uMsg,wParam,lParam)
	Select uMsg
		Case #WM_POWERBROADCAST
		Select wParam
			Case #PBT_APMSUSPEND
			Debug "ENTERING STANDBY MODE!"

			Case #PBT_APMRESUMESUSPEND
			Debug "SYSTEM RESUMED FROM STANDBY!"			
		EndSelect
	EndSelect
	
	ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure

SetWindowCallback(@WindowCallback())

While WaitWindowEvent() ! #PB_Event_CloseWindow : Wend
Windows 10 Pro, 64-Bit / Outtakes | Derek
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

ah... da ist die korrekte API-Lösung. :mrgreen:

... dachte ich mir doch, dass es da was geben muss, hatte aber keinen Bock, im Trüben zu fischen ...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Naja, man kann nicht feststellen ob StandBy, nur ob der PC in einen niedrigeren
Batterielevel geschaltet wurde :mrgreen:
Dies könnte auch Ruhezustand bzw. Energiesparen (Vista) sein.
Zuletzt geändert von ts-soft am 15.10.2008 20:23, insgesamt 1-mal geändert.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

Kaeru Gaman hat geschrieben:also, mit Ems funzt das auch, habs extra mal getestet
Hätte gedacht, dass dem nicht so ist, denn während der PC ja im StandBy-Modus ist, läuft er ja nicht.
ElapsedMilliseconds() liefert aber die Anzahl Millisekunden, die der PC schon läuft, dürfte doch (logisch betrachtet) nicht nach der Differenzmethode arbeiten, oder?

Differenzmethode = AktuellerZeitpöunkt — ZeitpunktDesStarts
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 »

Ems liefert zwar die ms seit einschalten, wird aber trotzdem von der internen Uhr gesteuert.

... ich hab grad mal auf der MSDN gesucht, aber da steht man ja auf verlorenem Posten ...
37 Artikel über irgendwas, wo GetTickCount drin vorkommt,
aber nach der wirklichen Funktionsbeschreibung sucht man sich nen Wolf.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Ractur
Beiträge: 128
Registriert: 24.06.2008 11:51

Beitrag von Ractur »

Bild@ALL [Ich habe es nun mit dem "Date-Trick" umgesetzt, funktioniert perfekt! ->THX AND]
Ractur, der mit dem Programmierstil der 80er Jahre :D
Antworten