GetSystemPowerStatus_()

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
hardfalcon
Beiträge: 3447
Registriert: 29.08.2004 20:46

GetSystemPowerStatus_()

Beitrag 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.
Zuletzt geändert von hardfalcon am 26.04.2005 15:42, insgesamt 3-mal geändert.
orange-blue
Beiträge: 556
Registriert: 04.09.2004 22:23
Kontaktdaten:

Beitrag von orange-blue »

hey cool das kann ich gebrauchen! :allright:
Benutzeravatar
hardfalcon
Beiträge: 3447
Registriert: 29.08.2004 20:46

Beitrag 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...
Benutzeravatar
dige
Beiträge: 1239
Registriert: 08.09.2004 08:53

Re: GetSystemPowerStatus_()

Beitrag 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."
"Papa, ich laufe schneller - dann ist es nicht so weit."
Benutzeravatar
hardfalcon
Beiträge: 3447
Registriert: 29.08.2004 20:46

Beitrag von hardfalcon »

Und die -128 ? ICh kapier das irgendwie nicht... Benutze ich die falschen Variabelntypen, oder an was liegt das?
Benutzeravatar
dige
Beiträge: 1239
Registriert: 08.09.2004 08:53

Beitrag 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
"Papa, ich laufe schneller - dann ist es nicht so weit."
Benutzeravatar
hardfalcon
Beiträge: 3447
Registriert: 29.08.2004 20:46

Beitrag von hardfalcon »

Danke, ich werd mal versuchen, das "&$FF" zu kapieren... Sollte ja möglich sein.... Vielen Dank für die schnelle Antwort! :allright:
Benutzeravatar
hardfalcon
Beiträge: 3447
Registriert: 29.08.2004 20:46

Beitrag 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
Benutzeravatar
Laurin
Beiträge: 1639
Registriert: 23.09.2004 18:04
Wohnort: /dev/eth0

Beitrag 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
Now these points of data make a beautiful line.
And we're out of beta. We're releasing on time.
Benutzeravatar
hardfalcon
Beiträge: 3447
Registriert: 29.08.2004 20:46

Beitrag von hardfalcon »

Achja, bei & werden jeweils die beiden zusammengehörenden Bits der beiden Variabeln addiert, bei + wird einfach blind dazugerechnet. Danke!
Antworten