Informations sur l'API internetGetConnectedState

[Résolu]
Signaler
Messages postés
176
Date d'inscription
mercredi 7 avril 2004
Statut
Membre
Dernière intervention
1 avril 2013
-
Messages postés
176
Date d'inscription
mercredi 7 avril 2004
Statut
Membre
Dernière intervention
1 avril 2013
-
Bonjour à tous


Dans ma recherche pour trouver l'adresse IP publique j'ai voulu utiliser l'API internetGetConnectedState mais dans la déclaration Private Declare Function InternetGetConnectedState Lib "wininet.dll" ( ByRef lpdwFlags As Integer, ByVal dwReserved As Integer) As Boolean


lpdwFlags retourne une valeur :


'INTERNET_CONNECTION_CONFIGURED:0x40. Local a un système de connexion à l'Internet, mais elle peut être ou ne pas être actuellement connecté.<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>


'INTERNET_CONNECTION_LAN:0x02 Local système utilise un réseau local pour se connecter à l'Internet.


'INTERNET_CONNECTION_MODEM:0x01 Local système utilise un modem pour se connecter à l'Internet.


'INTERNET_CONNECTION_MODEM_BUSY: 0x08 N'est plus utilisé.


'INTERNET_CONNECTION_OFFLINE: 0x20 Local système est en mode hors connexion.


'INTERNET_CONNECTION_PROXY: 0x04 Local système utilise un serveur proxy pour se connecter à l'Internet.


Mais lorsque je fait l'essais sur ma connexion qui directement sur un modem ADSL j'ai en retour de valeur 81 un ami derrière un routeur à la valeur 18.


Donc je me pose la question pourquoi ces différences de valeurs? Et quelles sont les bonnes valeurs?



 




De plus dans mes recherches sur internet j'ai vu à plusieurs reprises reprendre ces valeurs mais de les vérifier d'une façon bizarre::




   If (lpdwFlags And INTERNET_CONNECTION_MODEM) = INTERNET_CONNECTION_MODEM Then….





Ou alors






   If lpdwFlags And INTERNET_CONNECTION_MODEM Then….






 





Ici dans mon cas ça donne if (81 and 1)= 1 then … ou if 81 and 1 then


Et ça fonctionne je n'y comprends rien !!!!?????

11 réponses

Messages postés
1263
Date d'inscription
mardi 11 novembre 2003
Statut
Membre
Dernière intervention
24 juillet 2013
6
Salut marc62118

Cet api donne l'état de ta connexion Internet et ne te donnera jamais ton Ip publique
Les valeurs retournées dans lpdwFlags diffère selon ton mode de connexion au NET : c'est l'Api qui renvoie les valeurs et non toi qui les fixe

Par exemple :
If (lpdwFlags And INTERNET_CONNECTION_MODEM) = INTERNET_CONNECTION_MODEM Then.. : on fait un AND binaire sur 8 bits pour vérifier si notre connexion est derrière un modem
Dans ton cas if 10000001 and 00000001 = 00000001 then   (en binaire)
                             81       and          1      =     1            then   (en héxadécimal)

La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.

GRENIER Alain
Messages postés
176
Date d'inscription
mercredi 7 avril 2004
Statut
Membre
Dernière intervention
1 avril 2013
1
ok merci pour cet explication et doit on toujours faire ce genre de comparaison dans les api pour savoir si on a le bonnes valeur??
et pourquoi ma connexion par modem renvoi 81 et pas simplement 1??

je suis d'accord ça ne me donnera pas l'adresse IP, c'était une étape !

encore merci
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
69
c'est un masque.

permet de fairer voyager plus d'infos...
Messages postés
176
Date d'inscription
mercredi 7 avril 2004
Statut
Membre
Dernière intervention
1 avril 2013
1
bonjour


j'ai pas compris Renfield ce que tu veux dire!? je suis preneur de plus d'infos!!!


j'ai accepté un peu rapidement la réponse car je ne comprends pas la comparaison  binaire  comment 10000001 and 00000001 peuvent ils être identique? le premier 1 de poids 0 de chaque valeur , je comprends 1 and 1=1 mias le 1 de poids 8 et le 0 de poids 8 commends peuvent ils donner 0 and 1= ???

comment savoir quels mode comparaison faire?


 
Messages postés
176
Date d'inscription
mercredi 7 avril 2004
Statut
Membre
Dernière intervention
1 avril 2013
1
rebonjour


pouvez vous me préciser quand on obtient INTERNET_CONNECTION_OFFLINE =H20 car quand je suis déconnecté j'ai tout de même la valeur cité plus haut 81 mais l'api renvois bien faux!
Messages postés
1263
Date d'inscription
mardi 11 novembre 2003
Statut
Membre
Dernière intervention
24 juillet 2013
6
Salut marco62118

Tout d'abord les poids vont de 0 à 7
Le And se fait sur 8 bits avec les bits de poids identiques

                                                lpdwFlags = 10000001 ou 81 héxa
INTERNET_CONNECTION_MODEM = 00000001 ou 01 héxa
AND entre ces 2 valeurs                            =00000001 ou 01 héxa

Etant donné que dans ces 2 valeurs seul le bit 0 est à 1 donc le AND donne 1 comme résultat
Dans ce cas on teste dans lpdwflags qui est la valeur renvoyée par l'Api si le bit 0 est à 1 ( si le bit indiquant si le paramètre INTERNET_CONNECTION_MODEM est positionné à 1)

La valeur INTERNET_CONNECTION_MODEM = 00000001 ou 01 héxa est souvent appelé un masque
Si on avait voulu tester si ce bit est à 0 on aurait utilisé 11111110 comme masque et on aurait fait un OR entre lpdwflags et 11111110

Quand à savoir quelle mode de comparaison effectuer ? Il faut connaitre l'Api et les paramètres qu'elle renvoie et savoir les utiliser et les interprèter.Il en est de même pour toutes les Apis de Windows

La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.

GRENIER Alain
Messages postés
1263
Date d'inscription
mardi 11 novembre 2003
Statut
Membre
Dernière intervention
24 juillet 2013
6
http://www.vbfrance.com/codes/NET2-TESTER-CONNECTION-INTERNET-AUTRE-METHODE-HTTPWEBREQUEST_36008.aspx



Dans ce post cet Api ne renverrait plus forcément des résultats corrects (surtout avec nos modes ADSL et routeur actuels)

La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.

GRENIER Alain
Messages postés
176
Date d'inscription
mercredi 7 avril 2004
Statut
Membre
Dernière intervention
1 avril 2013
1
j'ai bien compris il faut vérifier si le bit du "masque" correspond au bit de la valeur retournée
H81=10000001
H01=00000001 CONNEXION MODEM
-----------------
AND               1
H81=10000001
H40=10000000connexion à internet possible
-----------------
and    1

merci
la conversation dont tu fait référence ne me parait pas prouver que les valeurs renvoyées ne sont pas valables
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
69
en gros, un and entre deux valeurs, ne va conserver que les bits à 1 dans les 2 valeurs entrées.

dans la premiere ET la deuxieme
Messages postés
1263
Date d'inscription
mardi 11 novembre 2003
Statut
Membre
Dernière intervention
24 juillet 2013
6
http://www.vbfrance.com/codes/NET2-TESTER-CONNECTION-INTERNET-AUTRE-METHODE-HTTPWEBREQUEST_36008.aspx



Je cite notre ami Brunews d'après le post ci-dessus:
Il dit : "InternetGetConnectedState() ne donne absolument plus rien de valable
avec les connexions permanentes de type adsl + routeur et c'est devenu
le cas général."
"Une tentative de connexion est le seul moyen (ping
ou autre), peut-être pas de savoir à coup sur si on est connecté mais
au moins de tenter d'atteindre un site."
Ceci n'engage que lui mais connaissant son sérieux et son savoir cela vaut presque parole d'évangile

La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.

GRENIER Alain
Messages postés
176
Date d'inscription
mercredi 7 avril 2004
Statut
Membre
Dernière intervention
1 avril 2013
1
ok si c'est selon Saint "Brunews"