HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

A számítógép energiaállapotának lekérdezése


Példaprogram letöltése

3664 bájt

Amennyiben hordozható számítógépet használunk, és olyan helyen vagyunk, ahol azt nem tudjuk a villamoshálózatról használni, munkánknak csak az akkumulátor kapacitása szabhat határt. Ebben a cikkben készítünk egy olyan kis programot, mely hasznos információkat szolgáltat a számítógépünk energiaállapotáról, így többek között az akkumulátor töltöttségi szintjéről, valamint arról, hogy hány percünk van még hátra, míg az kimerül.

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;

Könyv
Ez a cikk megtalálható ebben a könyvben: Delphi Software Offline 2003 évkönyv 494. oldal

Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!

Copyright © 1999-2012 Animare Software Kft. Minden jog fenntartva!
| Készült: Animare Stúdió | Adatvédelem | Kapcsolat |