Notebook battery information

Fevereiro 4, 2009

Nesse post vou fazer um label1 receber as informações completas da fonte do computador.

Primeiramente ponha dentro de implementation os valores:

const
AC_OFFLINE = 0;
AC_ONLINE = 1;
AC_DESCONHECIDO = 255;
BAT_CARGA_CHEIA = 1;
BAT_CHARGA_BAIXA = 2;
BAT_CRITICO = 4;
BAT_CARREGANDO = 8;
BAT_AUSENTE = 128;
BAT_DESCONHECIDO = 255;

Em seguida insira uma procedure comum como a de um TTimer1

procedure TForm1.Timer1Timer(Sender: TObject);
var
EstadoDaFonte: _SYSTEM_POWER_STATUS;
status,flag,nivel,tempor,tempot:string;
begin
GetSystemPowerStatus(EstadoDaFonte);
case EstadoDaFonte.ACLineStatus of
AC_OFFLINE: status := ‘Usando a bateria’;
AC_ONLINE: status := ‘Ligado na tomada’;
AC_DESCONHECIDO: status := ‘Estado da fonte desconhecido’;
end;
case EstadoDaFonte.BatteryFlag of
BAT_CARGA_CHEIA: flag := ‘Bateria com carga cheia’;
BAT_CHARGA_BAIXA: flag := ‘Bateria com carga baixa’;
BAT_CRITICO: flag := ‘Bateria com carga baixa em nível crítico’;
BAT_CARREGANDO OR 9: flag := ‘Bateria carregando…’;
BAT_AUSENTE: flag := ‘Sem bateria instalada’;
BAT_DESCONHECIDO: flag := ‘Estado desconhecido’;
else
if status = ‘Usando a bateria’ then flag:=’Descarregando…’;
if status = ‘Ligado na tomada’ then flag:=’Carregando…’;
end;
if EstadoDaFonte.BatteryLifePercent <= 100 then
nivel := ‘Nível: ‘+IntToStr(EstadoDaFonte.BatteryLifePercent)+’%’
else if EstadoDaFonte.BatteryLifePercent = HIGH(BYTE) then
nivel := ‘Nível: Desconhecido’;
if EstadoDaFonte.BatteryLifeTime < HIGH(DWORD) then
tempor := ‘Tempo restante de uso: ‘ + IntToStr(EstadoDaFonte.BatteryLifeTime div 60) + ‘ minutos’
else tempor := ‘Tempo restante de uso: Desconhecido’;
if EstadoDaFonte.BatteryFullLifeTime < HIGH(DWORD) then
tempot:=’Duração total da bateria: ‘ + IntToStr(EstadoDaFonte.BatteryFullLifeTime div 60) + ‘ minutos’
else tempot:=’Duração total da bateria: Desconhecido’;
label1.caption:=status+#13+flag+#13+nivel+#13+tempor+#13+tempot;
end;


Returning HTML Code (Delphi WebBrowser)

Dezembro 2, 2008

Como ontem precisei deste código para solucionar um problema para “um amigo” e não encontrei nada, perdi algumas horinhas bolando um, então resolvi soltar o código ai ;)
tá ai brother hehe..

Proposta:
Receber em modo texto para qualquer componente ou variável string o código HTML de uma página independente da configuração proxy especificada pelo internet explorer.

Solução:
Para que o site sempre fosse localizado eu desenvolvi duas maneiras para que o proxy fosse sempre detectado. Na primeira maneira, (e pelo jeito não a mais recomendada), eu desenvolvi um código (que funciona apenas no Delphi 5), para pegar o proxy no registro:
procedure (De um OnbuttonClick por exemplo);
var //variáveis
registro : TRegistry;
proxynoregistro : string;
proxy,p : string;
porta : integer;
i,pos : integer;
begin registro := TRegistry.Create;
registro.RootKey := HKEY_CURRENT_USER;
if registro.OpenKey(‘\Software\Microsoft\Windows\CurrentVersion\Internet Settings’, True) then
proxynoregistro:=Registro.ReadString(‘ProxyServer’);
registro.free;
proxy:=”; porta:=0; p:=”;
pos:=0; while proxynoregistro[pos] ‘:’ do inc(pos);
memo1.lines.add(”); memo1.lines.add(”); memo1.lines.add(”);
memo1.lines.strings[0]:=’['+INTTOSTR(pos)+'] Proxy identificado…’;
memo1.lines.Strings[1]:=”;
memo1.lines.Strings[2]:=”;
for i:=0 to pos-1 do
memo1.lines.strings[1]:=memo1.lines.strings[1]+proxynoregistro[i];
for i:=pos+1 to length(proxynoregistro) do
memo1.lines.strings[2]:=memo1.lines.strings[2]+proxynoregistro[i];
try proxy:=memo1.lines.strings[1];
p:=memo1.lines.strings[2];
porta:=STRTOINT(p);
if memo1.lines.Strings[1] = ” then proxy:=”;
if memo1.lines.Strings[2] = ” then porta:=0;
except end;
Componente.Proxy:=proxy;
Componente.ProxyPort:=porta;
Componente.Get(…

já validado para funcionar caso o proxy não esteja especificado. Porem, é uma das gambiarras mais locas que já fiz também.. e convenhamos, desnecessária.
Eu utilizei do TNMHttp1 disponível apenas para o Delphi 5.
Por outro lado,
Tive que abandonar e iniciar toda a função de uma mesma maneira com componentes compatíveis com o Delphi 5 e 7,
foi ai que encontrei o TWebBrowser1
Disponível nos Delphi’s 5 ou 7 > Internet > WebBrowser

Ok… Para que a function funcione, precisaremos declarar algumas coisas na uses como OleCtrls, SHDocVw, e ActiveX;

Depois insira o componente WebBrowser1, um Edit1, e um Memo1.

E em implementation insira a function:

function getHTMLcode(memo: TStrings): Boolean;
var
psi: IPersistStreamInit;
iss: TStringStream;
is: IStream;
s: string;
begin
psi := WebBrowser1.Document as IPersistStreamInit;
s := ”;
iss := TStringStream.Create(s);
try is := TStreamAdapter.Create(iss, soReference) as IStream;
result := Succeeded(ps.Save(is, True));
if result then memo.Add(iss.Datastring);
finally iss.Free;
end;
end;

//E o evento que perceberá quando a página foi carregada e seu código poderá ser retirado, é este!…
procedure TForm1.WebBrowser1DownloadComplete(Sender: TObject);
begin
memo1.clear;
getHTMLcode(Memo1.Lines);
end;

//Depois a função de carregar a página pode ser facilmente chamada…
procedure (Exemplo de um OnButtonClick);
var
flag:olevariant;
begin
webbrowser1.navigate(edit1.text,flag,flag,flag,flag);
//função principal para chamar a página da web desejada
//especificada (no exemplo) pelo componente edit1.text.
end;

end.
Enjoy =]


Windows Query End Session

Novembro 14, 2008

Hoje eu vou ensinar a procedure em pascal que fica atenta às mensagens que o Windows envia as aplicações.. hoje em especifico, a mensagem de encerramento dos programas para o desligamento do computador.

O Windows para encerrar os processos envia uma mensagem aos programas uma única vez, e aguarda até que os programas respondam com confirmação está mensagem para que ele possa encerrar o Explorer e finalizar.

Obs: A mensagem que ele envia pode ser simulada no Delphi, com está função..
SendMessage(HWND, MESSAGE, 0, 0);

Agora vamos à inserção da procedure que identifica a mensagem de desligamento.

Antes de mais nada verifique a declaração de: Windows, nas uses.

Agora no public da unit.. cole está referencia de procedure:
procedure WMQueryEndSession (var Msg : TWMQueryEndSession); message WM_QueryEndSession;

Ps: WM_QueryEndSession, é a mensagem que é enviada do windows para o seu programa, informando que o Windows está em processo de desligamento!

Declare uma variável global chamada: permitirdesligar como string;
Var permitirdesligar : string;

Agora cole na implementação a procedure:
procedure TForm1.WMQueryEndSession (var Msg : TWMQueryEndSession);
begin
if uppercase(permitirdesligar) = ‘SIM’ then
begin
application.terminate;
Msg.Result := 1;
End
Else
Abort;
End;

Lembrando que, na verdade está variável global apenas vai armazenar as respostas SIM e NÃO, e identificar que quando a resposta for SIM, ele irá enviar a resposta de confirmação e encerrar o programa, caso contrario, ira abortar a mensagem.

Agora basta você digitar:
permitirdesligar:=’não’;
quando quiser que seu programa continue executando!.. e depois coloque como:
permitirdesligar:=’sim’;
para que ele continue o processo de desligamento normalmente.

Enjoy ;)


Contar palavras (em c++)

Novembro 11, 2008

Este exercicio da faculdade vai para tirar uma dúvida de um amigo meu (Jynex),
e para mostrar que eu completei u desafio dele… ehhe.. abraço vei ;)

Inicializa o programa com as bibliotecas de string tbm:
#include(stdio.h)
#include(conio.h)
#include(string.h)
//Altere os parenteses por sinal de maior e menor =]

Define o tamanho do campo p/ digitar as palavras, e inicializa o programa (sem módulos):
#define c 100

int main(void) {
char palavra[c];
int count=0,i,j;
clrscr();
printf(“Entre com as palavras: “);

Agora, está função limpa a este setor da memória para que não aconteça casos
em que o gets passa direto:
fflush(stdin);
gets(palavra);
j=strlen(palavra)-1;

Agora vamos as validações tão desejadas ;)
1. Eliminar os espaços do final da frase:
while(palavra[j]==’ ‘) palavra[j--]=’/0′;

2. Passar contando os espaços, mas, espaços que não estejam seguidos de outros espaços:
for(i=0;i<=j;i++) if((palavra[i]==’ ‘) && (palavra[i-1]!=’ ‘)) count++;

3. Por fim contar a ultima palavra (que não tem espaço no final (graças a primeira validação))..
E exibir o numero de espaços que foram contados..
count++;
printf(“Numero de palavras: %d”,count);
getch();
return 0;
}

É isso ai ..
É tosco, mas é uma validação completa.. e simples de entender! =]
Até mais.