Pergunta

Desejo escrever um aplicativo Windows que faça algo quando fico desconectado da Internet. Eu estava pensando em escrever um aplicativo C#/Delphi muito simples, que simplesmente faz pesquisas a cada 20 segundos para ver se ainda estou conectado.

Se eu tiver que pesquisar, eu realmente gostaria de uma solução além de tentar baixar uma página da web da rede. Não posso assumir que uma tentativa de download de falhar significa "não online", pois pode haver outros aplicativos consumindo a largura de banda da Internet. Além disso, tenho certeza de que constantemente conectar/baixar de um site específico vai bloquear meu IP.

Tenho certeza que há um Maneira de saber se você está online sem baixar/conectar a um servidor remoto Mas não tenho certeza de como.

Foi útil?

Solução

Cuidado que conectado à Internet realmente não significa nada: e se você estiver conectado ao seu ISP, mas a espinha dorsal está baixa ou todos os sites que você deseja acessar estão em um país que saiu da grade como recentemente? Ter uma conexão não significa que você pode fazer o que deseja.
Enfim, como afirmado antes de usar o InternetGetConnectedState API para testar que você tem uma conexão com a Internet válida configurada.
Como exemplo, a rotina a seguir me disse corretamente que eu tinha uma conexão LAN, mas não consegui detectar que eu tinha meu firewall zonealarm definido para bloquear "toda a atividade da Internet", o que significa que você perdeu efetivamente toda a conectividade da Internet.

Rotina Delphi:

procedure IsConnected;
var
  dwFlags: DWORD;
begin
  if InternetGetConnectedState(@dwFlags, 0) then
  begin
    if (dwFlags and INTERNET_CONNECTION_MODEM) = INTERNET_CONNECTION_MODEM  then
      ShowMessage('Modem Connection')
    else
    if (dwFlags and INTERNET_CONNECTION_LAN) = INTERNET_CONNECTION_LAN then
      ShowMessage('LAN Connection')
    else
    if (dwFlags and INTERNET_CONNECTION_PROXY) = INTERNET_CONNECTION_PROXY then
      ShowMessage('Connection thru Proxy')
    else
    if (dwFlags and INTERNET_CONNECTION_OFFLINE) = INTERNET_CONNECTION_OFFLINE then
      ShowMessage('Local system in offline mode')
    else
    if (dwFlags and INTERNET_CONNECTION_CONFIGURED) = INTERNET_CONNECTION_CONFIGURED then
      ShowMessage('Valid connection exists, but might or might not be connected')
  end
  else
    ShowMessage('Not Connected. Try to connect and risk of being prompted to dial into another Internet Service Provider.');
end;

Outras dicas

Ligar para InternetGetConnectedState função. este Artigo da Base do Conhecimento explica como fazer isso.

Parece que pode ser feito usando o método descrito aqui: http://www.csharphelp.com/archives3/archive499.html

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top