Verificar se Internete está conectada
Preciso ver se o usuário está com a internet conectada. Tentei as seguinte funções:
**********
function InternetConectada : boolean;
Var
ConnectedState : DWord;
begin
InternetGetConnectedState(@ConnectedState, 0);
if (INTERNET_CONNECTION_LAN and ConnectedState = INTERNET_CONNECTION_LAN) or
(INTERNET_CONNECTION_MODEM and ConnectedState = INTERNET_CONNECTION_MODEM) or
(INTERNET_CONNECTION_PROXY and ConnectedState = INTERNET_CONNECTION_PROXY) then
Result := True
else
Result := False;
end;
e
if InternetGetConnectedState(@flags, 0) then
ShowMessage(´Internet conectada´);
***********
O problema é que, mesmo que não exista conexão com a internet, o resutado é sempre true.
Faço o seguinte teste: no meu laboratório de testes tenho um modem roteador para conexão à internet. Primeiro faço o teste com tudo ligado. Depois tiro o cabo do modem do roteador, ou seja, desligo o sinal ADSL. Porém, executando as rotinas, ambas retornam true, quando deveriam retornar false.
Alguém sabe por que isso ocorre?
Existe alguma outra forma de fazer o que preciso?
Obrigado.
**********
function InternetConectada : boolean;
Var
ConnectedState : DWord;
begin
InternetGetConnectedState(@ConnectedState, 0);
if (INTERNET_CONNECTION_LAN and ConnectedState = INTERNET_CONNECTION_LAN) or
(INTERNET_CONNECTION_MODEM and ConnectedState = INTERNET_CONNECTION_MODEM) or
(INTERNET_CONNECTION_PROXY and ConnectedState = INTERNET_CONNECTION_PROXY) then
Result := True
else
Result := False;
end;
e
if InternetGetConnectedState(@flags, 0) then
ShowMessage(´Internet conectada´);
***********
O problema é que, mesmo que não exista conexão com a internet, o resutado é sempre true.
Faço o seguinte teste: no meu laboratório de testes tenho um modem roteador para conexão à internet. Primeiro faço o teste com tudo ligado. Depois tiro o cabo do modem do roteador, ou seja, desligo o sinal ADSL. Porém, executando as rotinas, ambas retornam true, quando deveriam retornar false.
Alguém sabe por que isso ocorre?
Existe alguma outra forma de fazer o que preciso?
Obrigado.
Armindo
Curtidas 0
Respostas
Nightshade
10/02/2007
utilize o TIdIPWatch da palheta indy..
dai no evento dele de onStatusChanged coloke
procedure TFrmMain.iIdIPWatch1StatusChanged(Sender: TObject);
begin
if (IdIPWatch1.IsOnline) then
begin
showmessage(´conectado´);
end;
end;
se vc tiver algum adaptador de rede ativo, ele deduzira que vc esta conectado a internet, pois ele nao verifica a conexao http, e sim sua placa de rede..
n precisa nem por timer nesse componente
[]´s
dai no evento dele de onStatusChanged coloke
procedure TFrmMain.iIdIPWatch1StatusChanged(Sender: TObject);
begin
if (IdIPWatch1.IsOnline) then
begin
showmessage(´conectado´);
end;
end;
se vc tiver algum adaptador de rede ativo, ele deduzira que vc esta conectado a internet, pois ele nao verifica a conexao http, e sim sua placa de rede..
n precisa nem por timer nesse componente
[]´s
GOSTEI 0
Armindo
10/02/2007
utilize o TIdIPWatch da palheta indy..
dai no evento dele de onStatusChanged coloke
procedure TFrmMain.iIdIPWatch1StatusChanged(Sender: TObject);
begin
if (IdIPWatch1.IsOnline) then
begin
showmessage(´conectado´);
end;
end;
se vc tiver algum adaptador de rede ativo, ele deduzira que vc esta conectado a internet, pois ele nao verifica a conexao http, e sim sua placa de rede..
n precisa nem por timer nesse componente
[]´s
Obrigado, mas não resolve. Esse componente faz a mesma coisa que as funções que citei na abertura do tópico, ou seja, independentemente se há ou não conexão com a intenet, o retorno é sempre true enquanto houver uma conexão de rede ativa.
Obrigado.
GOSTEI 0