none
Savoir si l'on est connecté à Internet ou pas. RRS feed

  • Discussion générale

  • Bonjour,

    voici ce que j'ai trouvé :

    If My.Computer.Network.IsAvailable = True Then
        MsgBox("Computer is connected.")
    Else 
        MsgBox("Computer is not connected.")
    End If

    Moi, je me déconnecte de la WIFI et je teste ça mais VB 2008 prétend que je suis connecté. Comment savoir réellement si l'on est connecté ou non ? Parce que mon programme ne répond plus si la connexion Internet n'existe pas.

    Merci

    samedi 27 juillet 2013 12:44

Toutes les réponses

  • J'ai trouvé une solution :

    Private Const FLAG_ICC_FORCE_CONNECTION = &H1 Private Declare Function InternetCheckConnection Lib "wininet.dll" Alias "InternetCheckConnectionA" (ByVal lpszUrl As String, ByVal dwFlags As Long, ByVal dwReserved As Long) As Long

    Ensuite :

    If InternetCheckConnection("http://www.google.com/", FLAG_ICC_FORCE_CONNECTION, 0&) = 0 Then MsgBox("Pas connecté !") Else MsgBox("Connecté !") End If

    C'est pénible d'écrire dans ce forum. Quand on appuie sur la touche "Supp", ça rajoute des lignes. Parfois ça écrit gros sans comprendre pourquoi... Quand on édite le code HTML, il y a plein de doublon <SPAN CLASS=...> Franchement inutiles.

    samedi 27 juillet 2013 14:01
  • Merci mais la solution que j'ai trouvé fonctionne donc je pense que c'est bon. Je n'ai pas testé sur Windows 8.
    Ma solution ne fonctionne pas sur Windows XP via Virtual PC. Il fait comme s'il était connecté. Or avec Seven ça marche. :(

    • Modifié Michel56100 samedi 27 juillet 2013 16:31 Complément
    samedi 27 juillet 2013 14:36
  • Bonjour, ta réponse ne semble pas convenir à VB 2008. :(

    samedi 27 juillet 2013 16:50
  • Voici une autre solution mais elle ne marche pas non plus sous Windows XP via Virtual PC.

    Le module :
    Module Module1
        Declare Function InternetGetConnectedState Lib "wininet.dll" (ByRef lpdwFlags As Long, ByVal dwReserved As Long) As Long
        Private Const CONNECT_LAN As Long = &H2
        Private Const CONNECT_MODEM As Long = &H1
        Private Const CONNECT_PROXY As Long = &H4
        Private Const CONNECT_OFFLINE As Long = &H20
        Private Const CONNECT_CONFIGURED As Long = &H40
        Private Const CONNECT_RAS As Long = &H10

        Public Function IsWebConneted(Optional ByRef ConnType As String = "") As Boolean
            Dim dwflags As Long
            Dim WebTest As Boolean
            WebTest = CBool(InternetGetConnectedState(dwflags, 0&))
            Select Case WebTest
                Case CBool(dwflags And CONNECT_LAN) : ConnType = "LAN"
                Case CBool(dwflags And CONNECT_MODEM) : ConnType = "Modem"
                Case CBool(dwflags And CONNECT_PROXY) : ConnType = "Proxy"
                Case CBool(dwflags And CONNECT_OFFLINE) : ConnType = "Offline"
                Case CBool(dwflags And CONNECT_CONFIGURED) : ConnType = "Configured"
                Case CBool(dwflags And CONNECT_RAS) : ConnType = "Remote"
            End Select
            IsWebConneted = WebTest
        End Function
    End Module

    Puis dans la form :

    If IsWebConneted() Then

         Msgbox("Connecté !")

    Else 

         Msgbox("Pas connecté !")

    End If

    samedi 27 juillet 2013 17:24
  • Mon module fonctionne sur Windows 7 et Windows 8 (Vista je présume aussi). Par contre, Windows XP prétend toujours être connecté (je l'ai testé sur un vieux PC). Mystère...
    samedi 27 juillet 2013 21:55
  • Pour que cela marche en 32 bits et 64 bits, il faut remplacer "Long" par "IntPtr".

    Donc, le module :

    Module ModuleWebTest
        Declare Function InternetGetConnectedState Lib "wininet.dll" (ByRef lpdwFlags As IntPtr, ByVal dwReserved As IntPtr) As IntPtr
        Private Const CONNECT_LAN As Long = &H2
        Private Const CONNECT_MODEM As Long = &H1
        Private Const CONNECT_PROXY As Long = &H4
        Private Const CONNECT_OFFLINE As Long = &H20
        Private Const CONNECT_CONFIGURED As Long = &H40
        Private Const CONNECT_RAS As Long = &H10
    
        Public Function IsWebConneted(Optional ByRef ConnType As String = "") As Boolean
            Dim dwflags As Long
            Dim WebTest As Boolean
            WebTest = CBool(InternetGetConnectedState(dwflags, 0&))
            Select Case WebTest
                Case CBool(dwflags And CONNECT_LAN) : ConnType = "LAN"
                Case CBool(dwflags And CONNECT_MODEM) : ConnType = "Modem"
                Case CBool(dwflags And CONNECT_PROXY) : ConnType = "Proxy"
                Case CBool(dwflags And CONNECT_OFFLINE) : ConnType = "Offline"
                Case CBool(dwflags And CONNECT_CONFIGURED) : ConnType = "Configured"
                Case CBool(dwflags And CONNECT_RAS) : ConnType = "Remote"
            End Select
            IsWebConneted = WebTest
        End Function
    End Module
    

    Puis dans la form :

    If ModuleWebTest.IsWebConneted = True Then

         Msgbox("Connecté !")

    Else 

         Msgbox("Pas connecté !")

    End If

    Cela ne marche pas sur Windows XP. Il prétend être toujours connecté. :-/

    mercredi 14 août 2013 10:36
  • Bonjour MicSoft,

    Pour moi sur un XP natif, ton code fonctionne. Mais effectivement sous Virtual PC, ou sous VirtualBox, la réponse est le plus souvent erronée (Connecté au lieu de Non connecté). Et dans le cas de VirtualBox ce n'est pas seulement XP, mais aussi W7 qui réagit comme cela.

    J'ai fait quelques essais en débranchant simplement le câble Ethernet, et dans le cas d'une machine virtuelle, c'est nécessairement le câble de la machine hôte. Tant que la carte réseau virtuelle est active ça indique connecté, même si le lien avec internet est rompu, les cartes réseaux peuvent fonctionner.

    Et la carte Ethernet ainsi que la  Wifi ne sont pas Plug and Play (dans les VM), on ne peut donc pas agir dessus comme sur les périphériques USB que l'on connecte / déconnecte à volonté.

    C'est peut être une des raisons te ton souci : le problème est dans les VM pas dans XP.


    Cordialement, Jacques

    jeudi 15 août 2013 08:56
  • Bonjour Jacques,

    ah, donc c'est Virtual PC ou Virtual Box qui nous fait croire cela. Ouf, parce que c'est le seul code qui marchait super bien et une réponse immédiate.

    Pour l'histoire de remplacer "Long" par "IntPtr", je le tiens peut être de toi. Une fonction qui ne marchait pas avec Windows 8 et que tu m'avais dit de faire cela (il me semble que c'est toi). Sous Windows 8 avec VS 2012, quand je débuggais en x64, la fonction de wininet.dll fonctionnait mais si je débuggais en x86, j'obtenais un message comme quoi "WebTest = CBool(InternetGetConnectedState(dwflags, 0&))" avait déstabilisé la pile. En remplaçant "Long" par "IntPtr", le problème avait disparu. :)

    Merci pour cette précision concernant XP.

    jeudi 15 août 2013 10:46
  • Pour  Long et IntPtr, c'est possible que ce soit ce fil  : IntPtr et SendMessage


    Cordialement, Jacques

    jeudi 15 août 2013 12:59
  • C'est exact, c'était bien SendMessage. :)
    jeudi 15 août 2013 13:14