Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Komponente zum abrufen des Batteriestatus (https://www.delphipraxis.net/178270-komponente-zum-abrufen-des-batteriestatus.html)

Dennis07 29. Dez 2013 05:20

Komponente zum abrufen des Batteriestatus
 
Moin,
wollt mal fragen, ob es außer Zylbattery noch (kostenlose) Komponenten gibt, mit denen man den Akkustatus abfragen kann (ja, AbfComponents Library hat noch sowas, ist aber leider nicht kostenlos).
Habe mir gerade XE5 Pro bestellt, weshalb mir das Geld zur Zeit (offensichtlicher weise) nicht so locker sitzt, als dass ich noch großartige Ausgaben deshalb tätigen will.
Vielleicht hat ja einer ovn euch ne Idee, oder kennt noch eine (kostenlose) Komponentensammlung, die das kann.

MFG
Dennis

jaenicke 29. Dez 2013 07:14

AW: Komponente zum abrufen des Batteriestatus
 
Eine Komponente ist dafür etwas übertrieben, es steckt schließlich im Wesentlichen nur ein API Aufruf von GetSystemPowerStatus dahinter:
http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx

ASM 29. Dez 2013 10:27

AW: Komponente zum abrufen des Batteriestatus
 
Siehe auch hier (im bereits genannten Sinne, d.h. bedarf keiner Komponente)

Dennis07 30. Dez 2013 00:14

AW: Komponente zum abrufen des Batteriestatus
 
Scheint nicht (richtig) zu funktionieren (bei mir zumindest).
Dort zeigt er nämlich immer nur "N/A" und "Healthy" an, obwohl ich ein Notebook habe und den Stecker draussen bzw. drinnen.... (PS: zZ arbeite ich noch unter Turbo-Delphi 06)

MFG

himitsu 30. Dez 2013 01:48

AW: Komponente zum abrufen des Batteriestatus
 
Zitat:

Zitat von Dennis07 (Beitrag 1241411)
Scheint nicht (richtig) zu funktionieren (bei mir zumindest).

Der Code aus
Zitat:

Zitat von ASM (Beitrag 1241342)
Siehe auch hier

ist auch Schrott.

Wie man da
Zitat:

Zitat von jaenicke (Beitrag 1241337)
Eine Komponente ist dafür etwas übertrieben, es steckt schließlich im Wesentlichen nur ein API Aufruf von GetSystemPowerStatus dahinter:
http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx

lesen kann, hat die API ein Result, das man gefälligst auswerten sollte.

Vielleicht verrät die Funktion ja, ob/warum sie "kein" Ergebnis liefert.

Furtbichler 30. Dez 2013 07:33

AW: Komponente zum abrufen des Batteriestatus
 
Zitat:

Zitat von himitsu (Beitrag 1241415)
Der Code aus...ist auch Schrott.

Aber es funktioniert soweit. Schrott ist trotzdem richtig, weil -wie Du schon sagtest- die Fehlerbehandlung fehlt.
Zitat:

Zitat von Dennis07 (Beitrag 1241411)
Dort zeigt er nämlich immer nur "N/A" und "Healthy" an, obwohl ich ein Notebook habe und den Stecker draussen bzw. drinnen....

Na, dann zeigt doch mal, wo 'N/A' und 'Healthy' angezeigt wird. Bei mir wird nämlich auch irgendwo 'N/A' angezeigt, allerdings bei der Anzeige der Batterielebensdauer. Die kann das Teil nicht liefern. Der Rest funktioniert. Ach, und der Code funktioniert natürlich auch mit D6, wobei mir 'Turbo Delphi 06' auch neu ist.

jaenicke 30. Dez 2013 11:41

AW: Komponente zum abrufen des Batteriestatus
 
Ich habe mal eine kleine Unit dafür geschrieben. Fast nicht getestet, die Lebensdauer stimmt wohl noch nicht, ich habe gerade keine Zeit nachzuschauen. Das mache ich heute Abend, dann kommt noch ein Update.

// EDIT: aktuelle Version siehe weiter unten:
http://www.delphipraxis.net/178270-k...ml#post1241466

Zum Testen einfach:
Delphi-Quellcode:
uses
  PowerStatusInfo;

  ShowMessage(TPowerStatusInfo.StatusDescription);
Bei Delphi 2006 sollte das glaube ich alles schon so gehen.

Furtbichler 30. Dez 2013 12:41

AW: Komponente zum abrufen des Batteriestatus
 
Achtung, dezent OT:
Ich habe mir gerade die Doku auf MSN durchgelesen und bin nun verunsichert. Seeehr verunsichert. ;-)
Zitat:

Zitat von MSN
SYSTEM_POWER_STATUS structure

Contains information about the power status of the system.
Syntax
Code:
typedef struct _SYSTEM_POWER_STATUS {
  BYTE ACLineStatus;
  BYTE BatteryFlag;
  BYTE BatteryLifePercent;
  BYTE Reserved1;
  DWORD BatteryLifeTime;
  DWORD BatteryFullLifeTime;
} SYSTEM_POWER_STATUS, *LPSYSTEM_POWER_STATUS;
...
BatteryLifeTime
The number of seconds of battery life remaining, or –1 if remaining seconds are unknown.

BatteryFullLifeTime
The number of seconds of battery life when at full charge, or –1 if full battery lifetime is unknown.

Es geht um die Deklaration von BatteryLifeTime und BatteryFullLifeTime (DWORD). Und ein DWORD ist also ein unsigned 32-bit Integer im Bereich 0 bis 4294967295.
Wie schafft die Funktion es dann, diesen beiden Feldern den Wert -1 zuzuweisen? :gruebel:
:mrgreen:

Ist mir nur so aufgefallen.

jaenicke 30. Dez 2013 14:04

AW: Komponente zum abrufen des Batteriestatus
 
Liste der Anhänge anzeigen (Anzahl: 1)
Da wird DWORD(-1), also $FFFFFFFF, zurückgegeben, der Wert ist nur nicht so einfach zu schreiben. :-D

Hier die fertig funktionierende Version:
Anhang 40448

Dennis07 30. Dez 2013 22:42

AW: Komponente zum abrufen des Batteriestatus
 
[QUOTE=Furtbichler;1241426]
Zitat:

Zitat von himitsu (Beitrag 1241415)
Ach, und der Code funktioniert natürlich auch mit D6, wobei mir 'Turbo Delphi 06' auch neu ist.

In dem fall Bedeutet "06" nicht "6", sondern ist die Abkürzung für 2006...

@Sebastian: Keine Ahrnung, wovon ihr redet, aber das kommt wohl noch (man lernt nie aus^^). Hab dir ja schon geschrieben, dass DXE5 jetzt drauf ist....

Furtbichler 31. Dez 2013 00:11

AW: Komponente zum abrufen des Batteriestatus
 
Zitat:

Zitat von Dennis07 (Beitrag 1241527)
In dem fall Bedeutet "06" nicht "6", sondern ist die Abkürzung für 2006...

Gut, dann sollte das eigentlich BDS 2006 heißen oder gibt es auch ein Turbo Delphi 2006?

himitsu 31. Dez 2013 00:19

AW: Komponente zum abrufen des Batteriestatus
 
Das erste Turbo Delphi ist eine Edition/Variante von Delphi 2006.

t.roller 20. Apr 2017 12:07

AW: Komponente zum abrufen des Batteriestatus
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von jaenicke (Beitrag 1241443)
Ich habe mal eine kleine Unit dafür geschrieben. Fast nicht getestet,...


Testen sollte man...

Mein Notebook läuft OHNE Netzteil und OHNE Akku.

jaenicke 21. Apr 2017 06:00

AW: Komponente zum abrufen des Batteriestatus
 
Ich habe leider nicht allzu viele Geräte zum Testen zur Verfügung.
Kannst du vielleicht mal einen Screenshot vom Inhalt von FSystemPowerStatus machen bitte?

t.roller 21. Apr 2017 06:55

AW: Komponente zum abrufen des Batteriestatus
 
Liste der Anhänge anzeigen (Anzahl: 1)
Netzteil angeschlossen, Akku wird geladen.
Siehe Anhang:

Ghostwalker 21. Apr 2017 08:37

AW: Komponente zum abrufen des Batteriestatus
 
Jup...bei mir das gleiche +
Fehler "Ungültiges Argument beim codieren der Uhrzeit" oder sowas....

Fehler gefunden:

Code:
var
  LifeTimeSeconds: [COLOR="Red"]Integer;[/COLOR]
begin
  if Refresh then
  begin
    LifeTimeSeconds := FSystemPowerStatus.BatteryFullLifeTime;
    if LifeTimeSeconds = $FFFFFFFF then
LifeTimeSeconds ist bei mir -1 und das scheint wohl doch nicht $FFFFFFFF zu sein

System Win10 Prof
Comp 10.2 Tokyo Starter


:)

jaenicke 21. Apr 2017 08:57

AW: Komponente zum abrufen des Batteriestatus
 
Liste der Anhänge anzeigen (Anzahl: 1)
Da habe ich damals ein paar Fehler gemacht... :oops:

Korrektur siehe Anhang...
Anhang 47171

t.roller 21. Apr 2017 10:51

AW: Komponente zum abrufen des Batteriestatus
 
Liste der Anhänge anzeigen (Anzahl: 1)
Immer noch fehlerhaft. Akku ist voll geladen und hat 100%.

Nachtrag:
Du hast falsche Werte "eingeschmuggelt":
Delphi-Quellcode:
class function TPowerStatusInfo.Refresh: Boolean;
begin
  if FUpdateCounter <= 0 then
    FSuccess := GetSystemPowerStatus(FSystemPowerStatus);
  FSystemPowerStatus.ACLineStatus := 1;
  FSystemPowerStatus.BatteryFlag := 9;
  FSystemPowerStatus.BatteryFullLifeTime := 4294967295;
  FSystemPowerStatus.BatteryLifePercent := 79;
  FSystemPowerStatus.BatteryLifeTime := 4294967295;
  Result := FSuccess;
end;

jaenicke 21. Apr 2017 11:01

AW: Komponente zum abrufen des Batteriestatus
 
Argh, danke, ich habe den Anhang korrigiert... :?

Ghostwalker 23. Apr 2017 01:29

AW: Komponente zum abrufen des Batteriestatus
 
Kleine zusätzliche Info:

Die Anzeige "Kein Akku vorhanden" ist sogar korrekt und bezieht sich auf den 1. Akku. 2. Akku wird (zumindest von der Standard-Windows Anzeige) als vorhanden gemeldet mit XX %.

Scheint so, als ob die Auflistung der Flags in der MSDN wohl ein wenig.....wenig ist :)

bnreimer42 23. Apr 2017 12:51

AW: Komponente zum abrufen des Batteriestatus
 
Ich habe die Rückgabe mal mit dem Output von smBIOS verglichen:

https://github.com/RRUZ/tsmbios/blob...atteryInfo.dpr

Kommt bei mir beide Male das selbe raus.

Unschön ist nur die Umwandlung des Datums 0 in 31.12.1899. Ich denke, man kann sagen, es ist kein Wert vorhanden, wenn 0 im Record zurückgegeben wird.


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:38 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz