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
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 »

Korrigiert:
Zur Darstellung, reicht es doch so:

Code: Alles auswählen

SPS.SYSTEM_POWER_STATUS
GetSystemPowerStatus_(SPS.SYSTEM_POWER_STATUS)
Debug StrU(SPS.SYSTEM_POWER_STATUS\ACLineStatus, #Byte)
Debug StrU(SPS.SYSTEM_POWER_STATUS\BatteryFlag, #Byte)
Debug StrU(SPS.SYSTEM_POWER_STATUS\BatteryLifePercent, #Byte)
Debug StrU(SPS.SYSTEM_POWER_STATUS\Reserved1, #Byte)
Debug StrU(SPS.SYSTEM_POWER_STATUS\BatteryLifeTime, #Byte)
Debug StrU(SPS.SYSTEM_POWER_STATUS\BatteryFullLifeTime, #Byte)
Warum DWORD in MSDN deklariert ist, und BYTE ausgewertet wird, ist mir aber nicht klar geworden :freak:
Zuletzt geändert von ts-soft am 26.04.2005 15:41, 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
hardfalcon
Beiträge: 3447
Registriert: 29.08.2004 20:46

Beitrag von hardfalcon »

@ts-soft: Vielen Dank, aber die beiden letzten Werte werden bei mir nur korrekt (=255) zurückgegeben, wenn ich "#Long" durch "#Byte" ersetze. Da die beiden letzten Werte jedoch Longs sein sollten, würde es mit "#Byte" auf einem Laptop mit Akku wahrscheinlich nicht mehr funzen (ich hab das ganze auf nem Desktop-PC)
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 »

hardfalcon hat geschrieben:@ts-soft: Vielen Dank, aber die beiden letzten Werte werden bei mir nur korrekt (=255) zurückgegeben, wenn ich "#Long" durch "#Byte" ersetze. Da die beiden letzten Werte jedoch Longs sein sollten, würde es mit "#Byte" auf einem Laptop mit Akku wahrscheinlich nicht mehr funzen (ich hab das ganze auf nem Desktop-PC)
Wenn Du Dir mit dem Struktureviewer, die Strukture anguckst, was man ja eigentlich immer macht, wirste feststellen, das die letzten beiden Werte als Long deklariert sind

Gruß
Thomas

Nachtrag: Hab aber in der MSDN nicht nachgeschaut ob signed oder unsigned Long, sondern bin erstmal davon ausgegangen, kannste dann ja mal überprüfen (bin zu faul)
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
hardfalcon
Beiträge: 3447
Registriert: 29.08.2004 20:46

Beitrag von hardfalcon »

Ich weiss das schon, aber bei mir kommt mit deiner Methode ein falscher Wert raus, während mit diges / Laurins Methode alles einwandfrei klappt.
Benutzeravatar
hardfalcon
Beiträge: 3447
Registriert: 29.08.2004 20:46

Beitrag von hardfalcon »

@ts-soft: Die letzten beiden Werte sind, galube ich, SIGNED Bytes, von daher können wir und das StrU() da sparen...

//EDIT: Und weil die Ergebnisse meistens wohl als Zahl und nicht als String gebraucht werden, ist IMHO "& 255" oder "& $FF" besser... Spart Rechenzeit.
Antworten