Código
Nesta dica será utilizado cinco labels e um Timer. Declare as constantes na seção implementation.
IMPORTANTE:
No arquivo de ajuda da API do Windows, o valor que define que a bateria está sendo carregada em BatteryFlag é 8. Porém, ao fazer o teste em um notebook (Toshiba Satellite, Windows XP SP2), foi constatado que o valor para o estado de "carregando bateria" é 9.
}
{declare as constantes para facilitar na hora de estudar o código}
const
AC_OFFLINE = 0; //desligado da tomada
AC_ONLINE = 1; //ligado na tomada
AC_DESCONHECIDO = 255; //estado desconhecido
BAT_CARGA_CHEIA = 1; //bateria com carga cheia
BAT_CHARGA_BAIXA = 2; //bateria com carga baixa
BAT_CRITICO = 4; //bateria com carga baixa em nível crítico
BAT_CARREGANDO = 8; //bateria carregando
BAT_AUSENTE = 128; //sem bateria acoplada
BAT_DESCONHECIDO = 255; //estado desconhecido
{$R *.DFM}
procedure TForm1.Timer1Timer(Sender: TObject);
var
EstadoDaFonte: _SYSTEM_POWER_STATUS;
begin
GetSystemPowerStatus(EstadoDaFonte);
case EstadoDaFonte.ACLineStatus of
AC_OFFLINE: Label1.caption := 'Usando a bateria';
AC_ONLINE: Label1.Caption := 'Ligado na tomada';
AC_DESCONHECIDO: Label1.Caption := 'Estado da fonte desconhecido';
end;
case EstadoDaFonte.BatteryFlag of
BAT_CARGA_CHEIA: Label2.Caption := 'Bateria com carga cheia';
BAT_CHARGA_BAIXA: Label2.Caption := 'Bateria com carga baixa';
BAT_CRITICO: Label2.Caption := 'Bateria com carga baixa em nível crítico';
BAT_CARREGANDO OR 9: Label2.Caption := 'Bateria carregando';
BAT_AUSENTE: Label2.Caption := 'Sem bateria instalada';
BAT_DESCONHECIDO: Label2.Caption := 'Estado desconhecido';
end;
if EstadoDaFonte.BatteryLifePercent <= 100 then
Label3.Caption := 'Nível: '+IntToStr(EstadoDaFonte.BatteryLifePercent)+'%'
else if EstadoDaFonte.BatteryLifePercent = HIGH(BYTE) then
Label3.Caption := 'Nível: Desconhecido';
if EstadoDaFonte.BatteryLifeTime < HIGH(DWORD) then
Label4.Caption := 'Tempo restante de uso: ' + IntToStr(EstadoDaFonte.BatteryLifeTime div 60) + ' minutos'
else
Label4.Caption := 'Tempo restante de uso: DESCONHECIDO';
if EstadoDaFonte.BatteryFullLifeTime < HIGH(DWORD) then
Label5.Caption := 'Duração total da bateria: ' + IntToStr(EstadoDaFonte.BatteryFullLifeTime div 60) + ' minutos'
else
Label5.Caption := 'Duração total da bateria: DESCONHECIDO';
end;
Planeta Delphi - www.planetadelphi.com.br - Todos os direitos reservados | Copyright 2001-2009