Testar conexão internet através do Delphi
Tenho uma aplicação que para executar um determinado procedimento, necessita estar conectada à internet. Sendo assim, antes de ativar o procedimento, tenho que testar se a máquina está conectada com a internet. Alguém poderia me ajudar informando de alguma função para resolver esse meu problema?
Um abraço a todos
Um abraço a todos
Pedrocassimiro
Curtidas 0
Respostas
Marco Salles
16/08/2008
De uma olhada na Unit : WinInet , existem muitas funçoes pre-definidas
que usa a API wininet.dll . Essa DLL esta definida em System32 no caso do Windows ...
De qualquer forma tente assim ...
que usa a API wininet.dll . Essa DLL esta definida em System32 no caso do Windows ...
De qualquer forma tente assim ...
var i:dword; begin if InternetGetConnectedState(@i,0) then showmessage(´esta conectado´) else showmessage(´nun ta não´);
GOSTEI 0
Pedrocassimiro
16/08/2008
Caro colaborador
Testei a rotina no meu micro e funcionou. Falta apenas testar nas máquinas do meu cliente, pois o mesmo possui uma rede com várias estações conectadas. Assim que concluir os testes te informo se está tudo OK.
Muito obrigado
Testei a rotina no meu micro e funcionou. Falta apenas testar nas máquinas do meu cliente, pois o mesmo possui uma rede com várias estações conectadas. Assim que concluir os testes te informo se está tudo OK.
Muito obrigado
GOSTEI 0
Pedrocassimiro
16/08/2008
Prezado colaborador
A rotina que você me orientou a implementar para testar a conexão com a Internet, funciona perefeitamente no meu notebook, onde tenho um modem banda larga 3G. Ao colocar a aolicação na maquina do meu cliente, que tem uma rede de 2 micros e um deles é ligado a um modem da Velox (internet banda larga), a rotina não funciona. Alguma outra orientação, pois ja nao sei mais o q fazer...
Um abraço
A rotina que você me orientou a implementar para testar a conexão com a Internet, funciona perefeitamente no meu notebook, onde tenho um modem banda larga 3G. Ao colocar a aolicação na maquina do meu cliente, que tem uma rede de 2 micros e um deles é ligado a um modem da Velox (internet banda larga), a rotina não funciona. Alguma outra orientação, pois ja nao sei mais o q fazer...
Um abraço
GOSTEI 0
Marco Salles
16/08/2008
Existem muitas rotinas com esta finalidade ... Ums tem sucessos com uma outras tem sucesso com outras . Bem pelo menos isto é o que dá para entender lendo os Tópicos sobre o assunto...
Eu particularmente , gosto de usar a dll wininet .. Eu porém não sei como esta configurado essas máquinas na Rede . Muitas vezes existem Terminais de rede com menos capacidade , com pouca memória e baixa velocidade e não comporta o Xp,ou não tem esta DLL instalada <System32> . São apenas Terminais ´Burros´.
Curiosamente voce chegou a testou o Codigo na Máquina SERVIDORA ???
Tente colocar o código abaixo e reporte o codigo abaixo para saber como é a sua Rede :
E tb efetuar uma pesquisa rápida que voce terá outras opções , para testar esta conectividade . So não deixa de informar com qual desses codigos voce conseguirá resolver o seu problema ...
por exemplo :
http://www.tecnobyte.com.br/dica5.html
http://forum.devmedia.com.br/viewtopic.php?p=97041&sid=42fad706634eae3c532bd6e80d5d1555
http://forum.devmedia.com.br/viewtopic.php?t=30176&start=0&postdays=0&postorder=asc&highlight=
http://www.forumweb.com.br/foruns/index.php?showtopic=31192
enfim , são muitas opções ... Mas o codigo que lhe passei deveria funcionar , pelo menos no SERVIDOR ????
Eu particularmente , gosto de usar a dll wininet .. Eu porém não sei como esta configurado essas máquinas na Rede . Muitas vezes existem Terminais de rede com menos capacidade , com pouca memória e baixa velocidade e não comporta o Xp,ou não tem esta DLL instalada <System32> . São apenas Terminais ´Burros´.
Curiosamente voce chegou a testou o Codigo na Máquina SERVIDORA ???
Tente colocar o código abaixo e reporte o codigo abaixo para saber como é a sua Rede :
function connectionkind: boolean; var flags: dword; begin result := internetgetconnectedstate(@flags, 0); if result then begin if (flags and internet_connection_modem) = internet_connection_modem then showmessage(´modem´); if (flags and internet_connection_lan) = internet_connection_lan then showmessage(´lan´); if (flags and internet_connection_proxy) = internet_connection_proxy then showmessage(´proxy´); if (flags and internet_connection_modem_busy) = internet_connection_modem_busy then showmessage(´modem busy´); end; end;
procedure TForm1.Button1Click(Sender: TObject); begin connectionkind; end;
E tb efetuar uma pesquisa rápida que voce terá outras opções , para testar esta conectividade . So não deixa de informar com qual desses codigos voce conseguirá resolver o seu problema ...
por exemplo :
http://www.tecnobyte.com.br/dica5.html
http://forum.devmedia.com.br/viewtopic.php?p=97041&sid=42fad706634eae3c532bd6e80d5d1555
http://forum.devmedia.com.br/viewtopic.php?t=30176&start=0&postdays=0&postorder=asc&highlight=
http://www.forumweb.com.br/foruns/index.php?showtopic=31192
enfim , são muitas opções ... Mas o codigo que lhe passei deveria funcionar , pelo menos no SERVIDOR ????
GOSTEI 0
Pedrocassimiro
16/08/2008
Marcos
Vou implementar novas rotinas e testar. Não se preocupe pois assim que resolver te retorno.
Um abraço
Vou implementar novas rotinas e testar. Não se preocupe pois assim que resolver te retorno.
Um abraço
GOSTEI 0
Ademir Lusa
16/08/2008
funcionou legal dessa forma
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, WiniNet;
type
TForm1 = class(TForm)
Button1: TButton;
procedure CONECTADO;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
IsGlobalOffline : Boolean;
implementation
{$R *.dfm}
procedure TForm1.CONECTADO;
var estado : Dword;
begin
if not InternetGetConnectedState(@estado, 0) then
IsGlobalOffline := False
else
begin
if (estado and INTERNET_CONNECTION_LAN <> 0) OR (estado and INTERNET_CONNECTION_MODEM <> 0) or (Estado and INTERNET_CONNECTION_PROXY <> 0) then
IsGlobalOffline := True;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var estado : Dword;
begin
CONECTADO;
if IsGlobalOffline = False then
BEGIN
ShowMessage('Você não está conectado à Internet.')
end;
if IsGlobalOffline = TRUE then
BEGIN
ShowMessage(':: Connection :: Você está conectado à Internet::');
end;
end;
End.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, WiniNet;
type
TForm1 = class(TForm)
Button1: TButton;
procedure CONECTADO;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
IsGlobalOffline : Boolean;
implementation
{$R *.dfm}
procedure TForm1.CONECTADO;
var estado : Dword;
begin
if not InternetGetConnectedState(@estado, 0) then
IsGlobalOffline := False
else
begin
if (estado and INTERNET_CONNECTION_LAN <> 0) OR (estado and INTERNET_CONNECTION_MODEM <> 0) or (Estado and INTERNET_CONNECTION_PROXY <> 0) then
IsGlobalOffline := True;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var estado : Dword;
begin
CONECTADO;
if IsGlobalOffline = False then
BEGIN
ShowMessage('Você não está conectado à Internet.')
end;
if IsGlobalOffline = TRUE then
BEGIN
ShowMessage(':: Connection :: Você está conectado à Internet::');
end;
end;
End.
GOSTEI 0
Geraldo Rodrigues
16/08/2008
Testei está última opção e funcionou corretamente.
GOSTEI 0
Rosilene Back
16/08/2008
Aqui não deu certo. Apenas verifica se está conectado a uma rede. Mais não verifica se nessa rede tem internet.
GOSTEI 0
Adriano Pratti
16/08/2008
Bom dia - Muito bom, eu só dei uma mudada um pouco na ideia e usei como function, assim posso usar a função direto dentro de u IF e o resultado eu trabalho conforme retorno, inclusive usei um STATUSBAR para mostrar o texto se com ou sem net. abaixo o script em forma de função para quem preferir.
function TForm1.funStatusInternet: Boolean;
var estado : Dword;
begin
try
if not InternetGetConnectedState(@estado, 0) then
Result := False
else
begin
if (estado and INTERNET_CONNECTION_LAN <> 0) OR
(estado and INTERNET_CONNECTION_MODEM <> 0) or
(Estado and INTERNET_CONNECTION_PROXY <> 0) then
Result := True;
end;
except
Result := False
end;
end;
//E dentro de um timer deixei a resposta assim no STATUSBAR
procedure TForm1.tmStatusInternetTimer(Sender: TObject);
begin
if not funStatusInternet then
begin
lblStatusInternet.Font.Color := clRed;
lblStatusInternet.Caption := 'SEM INTERNET OFFLINE';
StatusBar1.Panels[0].Text := 'SEM INTERNET OFFLINE';
end
else
begin
lblStatusInternet.Font.Color := clGreen;
lblStatusInternet.Caption := 'INTERNET ONLINE';
StatusBar1.Panels[0].Text := 'INTERNET ONLINE';
end;
end;
Obrigado a todos.
function TForm1.funStatusInternet: Boolean;
var estado : Dword;
begin
try
if not InternetGetConnectedState(@estado, 0) then
Result := False
else
begin
if (estado and INTERNET_CONNECTION_LAN <> 0) OR
(estado and INTERNET_CONNECTION_MODEM <> 0) or
(Estado and INTERNET_CONNECTION_PROXY <> 0) then
Result := True;
end;
except
Result := False
end;
end;
//E dentro de um timer deixei a resposta assim no STATUSBAR
procedure TForm1.tmStatusInternetTimer(Sender: TObject);
begin
if not funStatusInternet then
begin
lblStatusInternet.Font.Color := clRed;
lblStatusInternet.Caption := 'SEM INTERNET OFFLINE';
StatusBar1.Panels[0].Text := 'SEM INTERNET OFFLINE';
end
else
begin
lblStatusInternet.Font.Color := clGreen;
lblStatusInternet.Caption := 'INTERNET ONLINE';
StatusBar1.Panels[0].Text := 'INTERNET ONLINE';
end;
end;
Obrigado a todos.
GOSTEI 0