Seite 1 von 2

GetSystemPowerStatus_()

Verfasst: 25.04.2005 22:35
von hardfalcon
Hiermit könnt ihr den Powerstatus des Systems abfragen. DAs ist v.a. bei Notebooks interessant. Nur gibt der API-Befehl bei mir teilweise die erwarteten Werte mit einem - davor zurück. Weiss jemand, woran das liegt? Oder muss ich die betreffenden Werte immer mit -1 multiplizieren?

Hier ist erstaml der Code:

Code: Alles auswählen

;© 2005 by hardfalcon, many thx to dige and Laurin!
;See also the following web documents:
;http://msdn.microsoft.com/library/Default.asp?url=/library/en-us/power/base/getsystempowerstatus.asp
;http://msdn.microsoft.com/library/default.asp?url=/library/en-us/power/base/system_power_status_str.asp
;http://msdn.microsoft.com/library/default.asp?url=/library/en-us/power/base/power_management_functions.asp

SPS.SYSTEM_POWER_STATUS
GetSystemPowerStatus_(SPS.SYSTEM_POWER_STATUS)
Debug SPS.SYSTEM_POWER_STATUS\ACLineStatus & 255 ;korrigiert
Debug SPS.SYSTEM_POWER_STATUS\BatteryFlag & 255 ;korrigiert
Debug SPS.SYSTEM_POWER_STATUS\BatteryLifePercent & 255 ;korrigiert
Debug SPS.SYSTEM_POWER_STATUS\Reserved1 & 255 ;korrigiert
Debug SPS.SYSTEM_POWER_STATUS\BatteryLifeTime
Debug SPS.SYSTEM_POWER_STATUS\BatteryFullLifeTime 
//EDIT: Code entsprechend den anderen Postings korrigiert, also bei den mit ";korrigiert" markierten zeilen hinten noch ein "& 255" hinzugefügt.

//EDIT2: Bei den beiden letzen Codezeilen das "& 255" wieder entfernt, da die beiden letzten Zeilen keine unsigned Bytes sind.

Verfasst: 25.04.2005 22:36
von orange-blue
hey cool das kann ich gebrauchen! :allright:

Verfasst: 25.04.2005 22:49
von hardfalcon
Danke für das positive Feedback! Ich habe mir den halben Tag lang den A**** aufgerissen, um mit vordefinierten Strukturen (SYSTEM_POWER_STATUS) klarzukommen. Der Source für VB aus dem API-Guide wollte sich einfach nicht portieren lassen, dann habe ich den aus dem MSDN genommen...

Re: GetSystemPowerStatus_()

Verfasst: 26.04.2005 12:24
von dige
hardfalcon hat geschrieben:...gibt der API-Befehl bei mir teilweise die erwarteten Werte mit einem - davor zurück. Weiss jemand, woran das liegt? Oder muss ich die betreffenden Werte immer mit -1 multiplizieren?
Das -1 steht für 255 .. laut MSDN "Unknown status."

Verfasst: 26.04.2005 14:02
von hardfalcon
Und die -128 ? ICh kapier das irgendwie nicht... Benutze ich die falschen Variabelntypen, oder an was liegt das?

Verfasst: 26.04.2005 14:10
von dige
Ganz einfach, PB verwendet Signierte Datentype ... also für den Typ
Byte zum Bsp.: -128 ... +128.

So erhälst Du den korrekten Wert: (Ergebnis mit &$FF verknüpfen)

Code: Alles auswählen

Debug SPS.SYSTEM_POWER_STATUS\BatteryFlag &$FF

Verfasst: 26.04.2005 14:12
von hardfalcon
Danke, ich werd mal versuchen, das "&$FF" zu kapieren... Sollte ja möglich sein.... Vielen Dank für die schnelle Antwort! :allright:

Verfasst: 26.04.2005 14:20
von hardfalcon
Ich glaube, ich habs halbwegs kapiert... Dann könnte ich ja anstelle von

Code: Alles auswählen

& $FF
auch eine der folgenden Möglichkeiten nehmen, oder ?

Code: Alles auswählen

& 255
+ $100 ;$100 ist die Hexadezimale Version von 25[b]6[/b]
+ 256
cya
Pascal

Verfasst: 26.04.2005 14:44
von Laurin
hardfalcon hat geschrieben:Ich glaube, ich habs halbwegs kapiert... Dann könnte ich ja anstelle von

Code: Alles auswählen

& $FF
auch eine der folgenden Möglichkeiten nehmen, oder ?

Code: Alles auswählen

& 255
+ $100 ;$100 ist die Hexadezimale Version von 25[b]6[/b]
+ 256
cya
Pascal
Ja, nein, nein. :wink:

& != +
Das heißt soviel, wie & ist nicht +.

Greetz Laurin

Verfasst: 26.04.2005 15:05
von hardfalcon
Achja, bei & werden jeweils die beiden zusammengehörenden Bits der beiden Variabeln addiert, bei + wird einfach blind dazugerechnet. Danke!