Question

Je souhaite rédiger une application Windows permettant de faire quelque chose lorsque je me déconnecte d'Internet . Je pensais écrire une application très simple C # / Delphi qui interrogerait simplement toutes les 20 secondes pour voir si je suis toujours connecté.

Si je dois interroger, je voudrais vraiment une solution autre que d’essayer de télécharger une page Web depuis le réseau. Je ne peux pas supposer qu'une tentative de téléchargement échouant signifie & "Pas en ligne &"; car il peut y avoir d'autres applications consommant la bande passante Internet. De plus, je suis sûr que mon adresse IP sera bloquée en permanence lors de la connexion / téléchargement depuis un site particulier.

Je suis sûr qu'il existe un moyen de savoir si vous êtes en ligne sans téléchargement / connexion à un serveur distant , mais je ne sais pas comment.

Était-ce utile?

La solution

Attention, le fait de se connecter à Internet ne veut pas dire grand chose: que se passe-t-il si vous êtes connecté à votre fournisseur d'accès à Internet, mais que votre réseau dorsal est en panne ou que tous les sites auxquels vous souhaitez accéder se trouvent dans un pays qui a récemment quitté le réseau? Avoir une connexion ne signifie pas que vous pouvez faire ce que vous voulez.
Quoi qu'il en soit, comme indiqué précédemment, vous pouvez utiliser l'API InternetGetConnectedState pour vérifier que vous disposez d'une connexion Internet valide configurée.
Par exemple, la routine suivante m'a dit correctement que j'avais une connexion LAN, mais n'a pas réussi à détecter que mon pare-feu ZoneAlarm était configuré pour bloquer & "Toutes les activités Internet &"; Ce qui signifie que vous avez effectivement perdu tout Connectivité Internet.

Routine 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;

Autres conseils

Appelez la fonction InternetGetConnectedState . Cet article de la base de connaissances explique comment procéder.

Il semble que cela puisse être fait en utilisant la méthode décrite ici: http: // www .csharphelp.com / archives3 / archive499.html

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top