Programunk alapját a GetSystemPowerStatus nevű függvény szolgáltatja, mely a következőképpen épül fel:

GetSystemPowerStatus
BOOL GetSystemPowerStatus(
LPSYSTEM_POWER_STATUS lpSystemPowerStatus
);
Paraméterek
LPSYSTEM_POWER_STATUS lpSystemPowerStatus
Egy SYSTEM_POWER_STATUS struktúrára mutató pointer, mely az állapot-információkat szolgáltatja.
)
Visszatérési érték
Amennyiben a függvény meghívása sikeres volt, egy nem-null értéket kapunk eredményként, sikertelen hívás esetén nullát.
Mielőtt belekezdenénk a példaprogram tárgyalásába, nézzük meg, milyen információkat is rejt magában a SYSTEM_POWER_STATUS struktúra.
typedef struct _SYSTEM_POWER_STATUS {
BYTE ACLineStatus;
BYTE BatteryFlag;
BYTE BatteryLifePercent;
BYTE Reserved1;
DWORD BatteryLifeTime;
DWORD BatteryFullLifeTime;
} SYSTEM_POWER_STATUS, *LPSYSTEM_POWER_STATUS;
Paraméterek
BYTE ACLineStatus
A hálózati energiaellátás állapotát mutatja meg. Értéke a következők közül lehet:
| Érték |
Jelentés |
| 0 |
Offline |
| 1 |
Online |
| 255 |
Ismeretlen állapot |
BYTE BatteryFlag
Az akkumulátor töltöttségére vonatkozó információkat tárolja. Értékei a következők lehetnek:
| Érték |
Jelentés |
| 1 |
Feltöltött |
| 2 |
Alacsony |
| 4 |
Kritikus |
| 8 |
Töltés alatt |
| 128 |
Nincs rendszerakkumulátor |
| 255 |
Ismeretlen állapot |
BYTE BatteryLifePercent
Az akkumulátor töltöttségét adja vissza %-os formában.
BYTE Reserved1
Lefoglalt változó, az értékének nullának kell lennie.
DWORD BatteryLifeTime
Az akkumulátor maradék kapacitásának hátralevő idejét mutatja másodpercben. Amennyiben ismeretlen, értéke -1 lesz.
DWORD BatteryFullLifeTime
Az akkumulátor teljes kapacitásának hátralevő idejét mutatja másodpercben. Amennyiben ismeretlen, értéke -1 lesz.
Megjegyzés
A BatteryFullLifeTime értéke a BatteryLifeTime és a BatteryLifePercent értékekből kalkulált becsült érték.
Lássuk most a forráskódot:
var
SysPowerStatus: TSystemPowerStatus;
LifeTime:string;
begin
ListBox1.Clear;
GetSystemPowerStatus(SysPowerStatus);
Ha az ACLineStatus értéke 1, akkor biztosan a hálózati áramforrásról kapja gépünk az energiát, ellenkező esetben akkumulátorról történik az energiaellátás.
if Boolean(SysPowerStatus.ACLineStatus) then
ListBox1.Items.Add('A számítógép a hálózati csatlakozóra van csatlakoztatva.')
else
ListBox1.Items.Add('A számítógép akkumulátorról működik.');
Megvizsgáljuk, hogy a BatterFlag milyen értéket mutat, és ennek megfelelően íratjuk ki az akkumulátor töltöttségi fokára vonatkozó információt.
if SysPowerStatus.BatteryFlag=1 then
ListBox1.Items.Add('Az akkumulátor töltöttségi foka: Teljesen fel van töltve.');
if SysPowerStatus.BatteryFlag=2 then
ListBox1.Items.Add('Az akkumulátor töltöttségi foka: Alacsony.');
...
Amennyiben nem asztali gépről van szó, azaz van benne rendszerakkumulátor, kiíratjuk annak töltöttségét %-os arányban.
if SysPowerStatus.BatteryFlag<>128 then
ListBox1.Items.Add('Az akkumulátor töltöttségi foka százalékban: '+FloatToStr(SysPowerStatus.BatteryLifePercent)+' %')
Amennyiben a gépben nincs akkumulátor, nem kérdezzük le a százalékos töltöttséget.
else
ListBox1.Items.Add('Az akkumulátor töltöttségi foka százalékban: Nincs rendszer akkumulátor.');
Megvizsgáljuk, hogy -1-e az értéke a BatteryLifeTime paraméternek. Amennyiben nem, kiíratjuk a hátralévő időt, ellenkező esetben ismeretlen lesz az érték.
LifeTime:=Format('%d',[SysPowerStatus.BatteryLifeTime]);
if LifeTime<>'-1' then
ListBox1.Items.Add('Az akkumulátor ennyi idő múlva fog kimerülni: '+LifeTime)
else
ListBox1.Items.Add('Az akkumulátor ennyi idő múlva fog kimerülni: Ismeretlen.');
Ugyanezt a vizsgálatot megtesszük a BatteryFullLifeTime paraméter esetében is.
LifeTime:=Format('%d',[SysPowerStatus.BatteryFullLifeTime]);
if LifeTime<>'-1' then
ListBox1.Items.Add('Az akkumulátor ennyi ideig bírja teljesen feltöltött állapotban: '+LifeTime)
else
ListBox1.Items.Add('Az akkumulátor ennyi ideig bírja teljesen feltöltött állapotban: Ismeretlen.');
end;