Buscar

Medindo o estado da bateria (notebook)

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;

Publicidade

Vote na dica




Quantidade de votos: 0 votos
Aceitação: 0%


Detalhes da dica

Categoria: Hardware
Adicionada dia: 20/10/07
Por: Ulysses José Correia Potiguara
Visualizada: 3895 vezes

Planeta Delphi - Tudo sobre programação Delphi Planeta Delphi - www.planetadelphi.com.br - Todos os direitos reservados | Copyright 2001-2009