Bonjour,
je dispose d'une application qui doit régulièrement vérifier si la machine
est connecté à internet.
Existe-t'il est objet dans le framework 1 ou 2 qui renvoi true si la
machine est connectée ou sinon false.
Je voudrais éviter de passer par des API
MErci
Sylo
Bonjour,
je dispose d'une application qui doit régulièrement vérifier si la machine
est connecté à internet.
Existe-t'il est objet dans le framework 1 ou 2 qui renvoi true si la
machine est connectée ou sinon false.
Je voudrais éviter de passer par des API
MErci
Sylo
Bonjour,
je dispose d'une application qui doit régulièrement vérifier si la machine
est connecté à internet.
Existe-t'il est objet dans le framework 1 ou 2 qui renvoi true si la
machine est connectée ou sinon false.
Je voudrais éviter de passer par des API
MErci
Sylo
Bonjour,
Je ne pense pas qu'il y ait un moyen de faire ça en mode managé sauf à
tester directement l'accès à un URL donné.
Concernant les méthodes non managées, voir un résumé ici:
http://www.ndis.com/faq/QA05040101.htm
Personnellement, j'ai toujours eu des difficultés avec les APIs
"officielles" et j'utilise une méthode particulière mise au point d'après
une idée originale de Edwin Eefting et décrite dans cet article:
http://www.codeguru.com/cpp/i-n/internet/generalinternet/comments.php/c3437/?threadC800
Je n'ai jamais eu de souci avec ce code quel que soit le type de
connexion. Ce code peut s'adapter à n'importe quel langage.
--
Patrick Philippot - Microsoft MVP
MainSoft Consulting Services
www.mainsoft.fr
"Sylo" <devbnet[at]free.fr> wrote in message
news:%Bonjour,
je dispose d'une application qui doit régulièrement vérifier si la
machine est connecté à internet.
Existe-t'il est objet dans le framework 1 ou 2 qui renvoi true si la
machine est connectée ou sinon false.
Je voudrais éviter de passer par des API
MErci
Sylo
Bonjour,
Je ne pense pas qu'il y ait un moyen de faire ça en mode managé sauf à
tester directement l'accès à un URL donné.
Concernant les méthodes non managées, voir un résumé ici:
http://www.ndis.com/faq/QA05040101.htm
Personnellement, j'ai toujours eu des difficultés avec les APIs
"officielles" et j'utilise une méthode particulière mise au point d'après
une idée originale de Edwin Eefting et décrite dans cet article:
http://www.codeguru.com/cpp/i-n/internet/generalinternet/comments.php/c3437/?threadC800
Je n'ai jamais eu de souci avec ce code quel que soit le type de
connexion. Ce code peut s'adapter à n'importe quel langage.
--
Patrick Philippot - Microsoft MVP
MainSoft Consulting Services
www.mainsoft.fr
"Sylo" <devbnet[at]free.fr> wrote in message
news:%23SqzqInhGHA.3572@TK2MSFTNGP04.phx.gbl...
Bonjour,
je dispose d'une application qui doit régulièrement vérifier si la
machine est connecté à internet.
Existe-t'il est objet dans le framework 1 ou 2 qui renvoi true si la
machine est connectée ou sinon false.
Je voudrais éviter de passer par des API
MErci
Sylo
Bonjour,
Je ne pense pas qu'il y ait un moyen de faire ça en mode managé sauf à
tester directement l'accès à un URL donné.
Concernant les méthodes non managées, voir un résumé ici:
http://www.ndis.com/faq/QA05040101.htm
Personnellement, j'ai toujours eu des difficultés avec les APIs
"officielles" et j'utilise une méthode particulière mise au point d'après
une idée originale de Edwin Eefting et décrite dans cet article:
http://www.codeguru.com/cpp/i-n/internet/generalinternet/comments.php/c3437/?threadC800
Je n'ai jamais eu de souci avec ce code quel que soit le type de
connexion. Ce code peut s'adapter à n'importe quel langage.
--
Patrick Philippot - Microsoft MVP
MainSoft Consulting Services
www.mainsoft.fr
"Sylo" <devbnet[at]free.fr> wrote in message
news:%Bonjour,
je dispose d'une application qui doit régulièrement vérifier si la
machine est connecté à internet.
Existe-t'il est objet dans le framework 1 ou 2 qui renvoi true si la
machine est connectée ou sinon false.
Je voudrais éviter de passer par des API
MErci
Sylo
Si je peu me permettre Patrick Phippot
tester une URL ne veux pas dire forcement
que la connexion a internet existe, dans l'exemple ou si tu teste une url
dont le site est momentanément hors service ton resultat sera alors erroné
Private Declare Function InternetGetConnectedState Lib "wininet.dll"
Return My.Computer.Network.IsAvailable
Bonjour a tous
Si je peu me permettre Patrick Phippot
tester une URL ne veux pas dire forcement que la connexion a internet
existe, dans l'exemple ou si tu teste une url dont le site est
Momentanément hors service ton resultat sera alors erroné
Il existe un exmple d'Abelman (developpez.com)
_____________________________________________
Déclaration de l'API
Private Declare Function InternetGetConnectedState Lib "wininet.dll" ( _
ByRef lpdwFlags As Integer, _
ByVal dwReserved As Integer) As Boolean
' Utilisation de l'API
Public Function IsConnected() as Boolean
Dim Desc As Integer
return InternetGetConnectedState(Desc, 0)
End Function
___________________________________________
Sinon en version V2.0 framework c'est plus facile
Public Function internetOnOrOff()
Return My.Computer.Network.IsAvailable
End Function
--
Cordialement,
Site : http://www.troxsa.info
Mail : http://cerbermail.com/?rIXgaw9Xsl
"Patrick Philippot" a écrit dans le
message de news:Bonjour,
Je ne pense pas qu'il y ait un moyen de faire ça en mode managé sauf à
tester directement l'accès à un URL donné.
Concernant les méthodes non managées, voir un résumé ici:
http://www.ndis.com/faq/QA05040101.htm
Personnellement, j'ai toujours eu des difficultés avec les APIs
"officielles" et j'utilise une méthode particulière mise au point d'après
une idée originale de Edwin Eefting et décrite dans cet article:
http://www.codeguru.com/cpp/i-n/internet/generalinternet/comments.php/c3437/?threadC800
Je n'ai jamais eu de souci avec ce code quel que soit le type de
connexion. Ce code peut s'adapter à n'importe quel langage.
--
Patrick Philippot - Microsoft MVP
MainSoft Consulting Services
www.mainsoft.fr
"Sylo" <devbnet[at]free.fr> wrote in message
news:%Bonjour,
je dispose d'une application qui doit régulièrement vérifier si la
machine est connecté à internet.
Existe-t'il est objet dans le framework 1 ou 2 qui renvoi true si la
machine est connectée ou sinon false.
Je voudrais éviter de passer par des API
MErci
Sylo
Si je peu me permettre Patrick Phippot
tester une URL ne veux pas dire forcement
que la connexion a internet existe, dans l'exemple ou si tu teste une url
dont le site est momentanément hors service ton resultat sera alors erroné
Private Declare Function InternetGetConnectedState Lib "wininet.dll"
Return My.Computer.Network.IsAvailable
Bonjour a tous
Si je peu me permettre Patrick Phippot
tester une URL ne veux pas dire forcement que la connexion a internet
existe, dans l'exemple ou si tu teste une url dont le site est
Momentanément hors service ton resultat sera alors erroné
Il existe un exmple d'Abelman (developpez.com)
_____________________________________________
Déclaration de l'API
Private Declare Function InternetGetConnectedState Lib "wininet.dll" ( _
ByRef lpdwFlags As Integer, _
ByVal dwReserved As Integer) As Boolean
' Utilisation de l'API
Public Function IsConnected() as Boolean
Dim Desc As Integer
return InternetGetConnectedState(Desc, 0)
End Function
___________________________________________
Sinon en version V2.0 framework c'est plus facile
Public Function internetOnOrOff()
Return My.Computer.Network.IsAvailable
End Function
--
Cordialement,
Site : http://www.troxsa.info
Mail : http://cerbermail.com/?rIXgaw9Xsl
"Patrick Philippot" <patrick.philippot@mainsoft.xx.fr> a écrit dans le
message de news: eidKyqthGHA.412@TK2MSFTNGP05.phx.gbl...
Bonjour,
Je ne pense pas qu'il y ait un moyen de faire ça en mode managé sauf à
tester directement l'accès à un URL donné.
Concernant les méthodes non managées, voir un résumé ici:
http://www.ndis.com/faq/QA05040101.htm
Personnellement, j'ai toujours eu des difficultés avec les APIs
"officielles" et j'utilise une méthode particulière mise au point d'après
une idée originale de Edwin Eefting et décrite dans cet article:
http://www.codeguru.com/cpp/i-n/internet/generalinternet/comments.php/c3437/?threadC800
Je n'ai jamais eu de souci avec ce code quel que soit le type de
connexion. Ce code peut s'adapter à n'importe quel langage.
--
Patrick Philippot - Microsoft MVP
MainSoft Consulting Services
www.mainsoft.fr
"Sylo" <devbnet[at]free.fr> wrote in message
news:%23SqzqInhGHA.3572@TK2MSFTNGP04.phx.gbl...
Bonjour,
je dispose d'une application qui doit régulièrement vérifier si la
machine est connecté à internet.
Existe-t'il est objet dans le framework 1 ou 2 qui renvoi true si la
machine est connectée ou sinon false.
Je voudrais éviter de passer par des API
MErci
Sylo
Si je peu me permettre Patrick Phippot
tester une URL ne veux pas dire forcement
que la connexion a internet existe, dans l'exemple ou si tu teste une url
dont le site est momentanément hors service ton resultat sera alors erroné
Private Declare Function InternetGetConnectedState Lib "wininet.dll"
Return My.Computer.Network.IsAvailable
Bonjour a tous
Si je peu me permettre Patrick Phippot
tester une URL ne veux pas dire forcement que la connexion a internet
existe, dans l'exemple ou si tu teste une url dont le site est
Momentanément hors service ton resultat sera alors erroné
Il existe un exmple d'Abelman (developpez.com)
_____________________________________________
Déclaration de l'API
Private Declare Function InternetGetConnectedState Lib "wininet.dll" ( _
ByRef lpdwFlags As Integer, _
ByVal dwReserved As Integer) As Boolean
' Utilisation de l'API
Public Function IsConnected() as Boolean
Dim Desc As Integer
return InternetGetConnectedState(Desc, 0)
End Function
___________________________________________
Sinon en version V2.0 framework c'est plus facile
Public Function internetOnOrOff()
Return My.Computer.Network.IsAvailable
End Function
--
Cordialement,
Site : http://www.troxsa.info
Mail : http://cerbermail.com/?rIXgaw9Xsl
"Patrick Philippot" a écrit dans le
message de news:Bonjour,
Je ne pense pas qu'il y ait un moyen de faire ça en mode managé sauf à
tester directement l'accès à un URL donné.
Concernant les méthodes non managées, voir un résumé ici:
http://www.ndis.com/faq/QA05040101.htm
Personnellement, j'ai toujours eu des difficultés avec les APIs
"officielles" et j'utilise une méthode particulière mise au point d'après
une idée originale de Edwin Eefting et décrite dans cet article:
http://www.codeguru.com/cpp/i-n/internet/generalinternet/comments.php/c3437/?threadC800
Je n'ai jamais eu de souci avec ce code quel que soit le type de
connexion. Ce code peut s'adapter à n'importe quel langage.
--
Patrick Philippot - Microsoft MVP
MainSoft Consulting Services
www.mainsoft.fr
"Sylo" <devbnet[at]free.fr> wrote in message
news:%Bonjour,
je dispose d'une application qui doit régulièrement vérifier si la
machine est connecté à internet.
Existe-t'il est objet dans le framework 1 ou 2 qui renvoi true si la
machine est connectée ou sinon false.
Je voudrais éviter de passer par des API
MErci
Sylo
Bonjour,
Je ne pense pas qu'il y ait un moyen de faire ça en mode managé sauf à
tester directement l'accès à un URL donné.
Concernant les méthodes non managées, voir un résumé ici:
http://www.ndis.com/faq/QA05040101.htm
Personnellement, j'ai toujours eu des difficultés avec les APIs
"officielles" et j'utilise une méthode particulière mise au point d'après
une idée originale de Edwin Eefting et décrite dans cet article:
http://www.codeguru.com/cpp/i-n/internet/generalinternet/comments.php/c3437/?threadC800
Je n'ai jamais eu de souci avec ce code quel que soit le type de
connexion. Ce code peut s'adapter à n'importe quel langage.
--
Patrick Philippot - Microsoft MVP
MainSoft Consulting Services
www.mainsoft.fr
"Sylo" <devbnet[at]free.fr> wrote in message
news:%Bonjour,
je dispose d'une application qui doit régulièrement vérifier si la
machine est connecté à internet.
Existe-t'il est objet dans le framework 1 ou 2 qui renvoi true si la
machine est connectée ou sinon false.
Je voudrais éviter de passer par des API
MErci
Sylo
Bonjour,
Je ne pense pas qu'il y ait un moyen de faire ça en mode managé sauf à
tester directement l'accès à un URL donné.
Concernant les méthodes non managées, voir un résumé ici:
http://www.ndis.com/faq/QA05040101.htm
Personnellement, j'ai toujours eu des difficultés avec les APIs
"officielles" et j'utilise une méthode particulière mise au point d'après
une idée originale de Edwin Eefting et décrite dans cet article:
http://www.codeguru.com/cpp/i-n/internet/generalinternet/comments.php/c3437/?threadC800
Je n'ai jamais eu de souci avec ce code quel que soit le type de
connexion. Ce code peut s'adapter à n'importe quel langage.
--
Patrick Philippot - Microsoft MVP
MainSoft Consulting Services
www.mainsoft.fr
"Sylo" <devbnet[at]free.fr> wrote in message
news:%23SqzqInhGHA.3572@TK2MSFTNGP04.phx.gbl...
Bonjour,
je dispose d'une application qui doit régulièrement vérifier si la
machine est connecté à internet.
Existe-t'il est objet dans le framework 1 ou 2 qui renvoi true si la
machine est connectée ou sinon false.
Je voudrais éviter de passer par des API
MErci
Sylo
Bonjour,
Je ne pense pas qu'il y ait un moyen de faire ça en mode managé sauf à
tester directement l'accès à un URL donné.
Concernant les méthodes non managées, voir un résumé ici:
http://www.ndis.com/faq/QA05040101.htm
Personnellement, j'ai toujours eu des difficultés avec les APIs
"officielles" et j'utilise une méthode particulière mise au point d'après
une idée originale de Edwin Eefting et décrite dans cet article:
http://www.codeguru.com/cpp/i-n/internet/generalinternet/comments.php/c3437/?threadC800
Je n'ai jamais eu de souci avec ce code quel que soit le type de
connexion. Ce code peut s'adapter à n'importe quel langage.
--
Patrick Philippot - Microsoft MVP
MainSoft Consulting Services
www.mainsoft.fr
"Sylo" <devbnet[at]free.fr> wrote in message
news:%Bonjour,
je dispose d'une application qui doit régulièrement vérifier si la
machine est connecté à internet.
Existe-t'il est objet dans le framework 1 ou 2 qui renvoi true si la
machine est connectée ou sinon false.
Je voudrais éviter de passer par des API
MErci
Sylo
Bonjour,
Bien, depuis le temps qu'on me demande de porter ça en VB, il faut bien
que je m'y mette... :-)
Tout d'abord faire un
Imports System.Runtime.InteropServices
Déclarer ensuite les structures nécessaires:
<Runtime.InteropServices.StructLayout(Runtime.InteropServices.LayoutKind.Sequential,
Pack:=4)> _
Public Structure MIB_IPFORWARDROW
Public dwForwardDest As System.UInt32
Public dwForwardMask As System.UInt32
Public dwForwardPolicy As System.UInt32
Public dwForwardNextHop As System.UInt32
Public dwForwardIfIndex As System.UInt32
Public dwForwardType As System.UInt32
Public dwForwardProto As System.UInt32
Public dwForwardAge As System.UInt32
Public dwForwardNextHopAS As System.UInt32
Public dwForwardMetric1 As System.UInt32
Public dwForwardMetric2 As System.UInt32
Public dwForwardMetric3 As System.UInt32
Public dwForwardMetric4 As System.UInt32
Public dwForwardMetric5 As System.UInt32
End Structure
<Runtime.InteropServices.StructLayout(Runtime.InteropServices.LayoutKind.Sequential,
Pack:=4)> _
Public Structure MIB_IPFORWARDTABLE
Public dwNumEntries As System.UInt32
<Runtime.InteropServices.MarshalAs(Runtime.InteropServices.UnmanagedType.ByValArray)>
_
Public table() As MIB_IPFORWARDROW
End Structure
Vient ensuite la fonction de test:
Faire l'import nécessaire:
<DllImport("iphlpapi.dll")> _
Public Shared Function GetIpForwardTable( _
ByRef pIpForwardTable As MIB_IPFORWARDTABLE _
, ByRef pdwSize As System.UInt32 _
, ByVal bOrder As System.UInt32 _
) As System.UInt32
End Function
et définir la fonction
Public Function CheckConnection() As Boolean
Dim pft As MIB_IPFORWARDTABLE = Nothing
Dim dwTableSize As Integer
Dim bHasDefaultRoute As Boolean = False
GetIpForwardTable(pft, dwTableSize, 0)
Dim ptr As IntPtr = Marshal.AllocHGlobal(dwTableSize)
Marshal.StructureToPtr(pft, ptr, True)
If GetIpForwardTable(pft, dwTableSize, 1) = 0 Then
For nIndex As UInteger = 0 To pft.dwNumEntries - 1
If pft.table(nIndex).dwForwardDest = 0 Then
bHasDefaultRoute = True
Exit For
End If
Next
End If
Return bHasDefaultRoute
End Function
La fonction retourn VRAI si une passerelle ets disponible.
Voilà. D'après mes premiers tests, ça fonctionne correctement.
--
Patrick Philippot - Microsoft MVP
MainSoft Consulting Services
www.mainsoft.fr
Bonjour,
Bien, depuis le temps qu'on me demande de porter ça en VB, il faut bien
que je m'y mette... :-)
Tout d'abord faire un
Imports System.Runtime.InteropServices
Déclarer ensuite les structures nécessaires:
<Runtime.InteropServices.StructLayout(Runtime.InteropServices.LayoutKind.Sequential,
Pack:=4)> _
Public Structure MIB_IPFORWARDROW
Public dwForwardDest As System.UInt32
Public dwForwardMask As System.UInt32
Public dwForwardPolicy As System.UInt32
Public dwForwardNextHop As System.UInt32
Public dwForwardIfIndex As System.UInt32
Public dwForwardType As System.UInt32
Public dwForwardProto As System.UInt32
Public dwForwardAge As System.UInt32
Public dwForwardNextHopAS As System.UInt32
Public dwForwardMetric1 As System.UInt32
Public dwForwardMetric2 As System.UInt32
Public dwForwardMetric3 As System.UInt32
Public dwForwardMetric4 As System.UInt32
Public dwForwardMetric5 As System.UInt32
End Structure
<Runtime.InteropServices.StructLayout(Runtime.InteropServices.LayoutKind.Sequential,
Pack:=4)> _
Public Structure MIB_IPFORWARDTABLE
Public dwNumEntries As System.UInt32
<Runtime.InteropServices.MarshalAs(Runtime.InteropServices.UnmanagedType.ByValArray)>
_
Public table() As MIB_IPFORWARDROW
End Structure
Vient ensuite la fonction de test:
Faire l'import nécessaire:
<DllImport("iphlpapi.dll")> _
Public Shared Function GetIpForwardTable( _
ByRef pIpForwardTable As MIB_IPFORWARDTABLE _
, ByRef pdwSize As System.UInt32 _
, ByVal bOrder As System.UInt32 _
) As System.UInt32
End Function
et définir la fonction
Public Function CheckConnection() As Boolean
Dim pft As MIB_IPFORWARDTABLE = Nothing
Dim dwTableSize As Integer
Dim bHasDefaultRoute As Boolean = False
GetIpForwardTable(pft, dwTableSize, 0)
Dim ptr As IntPtr = Marshal.AllocHGlobal(dwTableSize)
Marshal.StructureToPtr(pft, ptr, True)
If GetIpForwardTable(pft, dwTableSize, 1) = 0 Then
For nIndex As UInteger = 0 To pft.dwNumEntries - 1
If pft.table(nIndex).dwForwardDest = 0 Then
bHasDefaultRoute = True
Exit For
End If
Next
End If
Return bHasDefaultRoute
End Function
La fonction retourn VRAI si une passerelle ets disponible.
Voilà. D'après mes premiers tests, ça fonctionne correctement.
--
Patrick Philippot - Microsoft MVP
MainSoft Consulting Services
www.mainsoft.fr
Bonjour,
Bien, depuis le temps qu'on me demande de porter ça en VB, il faut bien
que je m'y mette... :-)
Tout d'abord faire un
Imports System.Runtime.InteropServices
Déclarer ensuite les structures nécessaires:
<Runtime.InteropServices.StructLayout(Runtime.InteropServices.LayoutKind.Sequential,
Pack:=4)> _
Public Structure MIB_IPFORWARDROW
Public dwForwardDest As System.UInt32
Public dwForwardMask As System.UInt32
Public dwForwardPolicy As System.UInt32
Public dwForwardNextHop As System.UInt32
Public dwForwardIfIndex As System.UInt32
Public dwForwardType As System.UInt32
Public dwForwardProto As System.UInt32
Public dwForwardAge As System.UInt32
Public dwForwardNextHopAS As System.UInt32
Public dwForwardMetric1 As System.UInt32
Public dwForwardMetric2 As System.UInt32
Public dwForwardMetric3 As System.UInt32
Public dwForwardMetric4 As System.UInt32
Public dwForwardMetric5 As System.UInt32
End Structure
<Runtime.InteropServices.StructLayout(Runtime.InteropServices.LayoutKind.Sequential,
Pack:=4)> _
Public Structure MIB_IPFORWARDTABLE
Public dwNumEntries As System.UInt32
<Runtime.InteropServices.MarshalAs(Runtime.InteropServices.UnmanagedType.ByValArray)>
_
Public table() As MIB_IPFORWARDROW
End Structure
Vient ensuite la fonction de test:
Faire l'import nécessaire:
<DllImport("iphlpapi.dll")> _
Public Shared Function GetIpForwardTable( _
ByRef pIpForwardTable As MIB_IPFORWARDTABLE _
, ByRef pdwSize As System.UInt32 _
, ByVal bOrder As System.UInt32 _
) As System.UInt32
End Function
et définir la fonction
Public Function CheckConnection() As Boolean
Dim pft As MIB_IPFORWARDTABLE = Nothing
Dim dwTableSize As Integer
Dim bHasDefaultRoute As Boolean = False
GetIpForwardTable(pft, dwTableSize, 0)
Dim ptr As IntPtr = Marshal.AllocHGlobal(dwTableSize)
Marshal.StructureToPtr(pft, ptr, True)
If GetIpForwardTable(pft, dwTableSize, 1) = 0 Then
For nIndex As UInteger = 0 To pft.dwNumEntries - 1
If pft.table(nIndex).dwForwardDest = 0 Then
bHasDefaultRoute = True
Exit For
End If
Next
End If
Return bHasDefaultRoute
End Function
La fonction retourn VRAI si une passerelle ets disponible.
Voilà. D'après mes premiers tests, ça fonctionne correctement.
--
Patrick Philippot - Microsoft MVP
MainSoft Consulting Services
www.mainsoft.fr
[REPOST - Annule et remplace le message précédent]
Bonjour,
Bien, depuis le temps qu'on me demande de porter ça en VB, il faut bien
que je m'y mette... :-)
Tout d'abord faire un
Imports System.Runtime.InteropServices
Déclarer ensuite les structures nécessaires:
<Runtime.InteropServices.StructLayout(Runtime.InteropServices.LayoutKind.Sequential,
Pack:=4)> _
Public Structure MIB_IPFORWARDROW
Public dwForwardDest As System.UInt32
Public dwForwardMask As System.UInt32
Public dwForwardPolicy As System.UInt32
Public dwForwardNextHop As System.UInt32
Public dwForwardIfIndex As System.UInt32
Public dwForwardType As System.UInt32
Public dwForwardProto As System.UInt32
Public dwForwardAge As System.UInt32
Public dwForwardNextHopAS As System.UInt32
Public dwForwardMetric1 As System.UInt32
Public dwForwardMetric2 As System.UInt32
Public dwForwardMetric3 As System.UInt32
Public dwForwardMetric4 As System.UInt32
Public dwForwardMetric5 As System.UInt32
End Structure
<Runtime.InteropServices.StructLayout(Runtime.InteropServices.LayoutKind.Sequential,
Pack:=4)> _
Public Structure MIB_IPFORWARDTABLE
Public dwNumEntries As System.UInt32
<Runtime.InteropServices.MarshalAs(Runtime.InteropServices.UnmanagedType.ByValArray)>
_
Public table() As MIB_IPFORWARDROW
End Structure
Vient ensuite la fonction de test:
Faire l'import nécessaire:
<DllImport("iphlpapi.dll")> _
Public Shared Function GetIpForwardTable( _
ByRef pIpForwardTable As MIB_IPFORWARDTABLE _
, ByRef pdwSize As System.UInt32 _
, ByVal bOrder As System.UInt32 _
) As System.UInt32
End Function
et définir la fonction
Public Function CheckConnection() As Boolean
Dim pft As MIB_IPFORWARDTABLE = Nothing
Dim ptr As IntPtr = Nothing
Dim dwTableSize As Integer
Dim bHasDefaultRoute As Boolean = False
GetIpForwardTable(Nothing, dwTableSize, 0)
ptr = Marshal.AllocHGlobal(dwTableSize)
pft = CType(Marshal.PtrToStructure(ptr, GetType(MIB_IPFORWARDTABLE)),
MIB_IPFORWARDTABLE)
If GetIpForwardTable(pft, dwTableSize, 1) = 0 Then
bHasDefaultRoute = (pft.table(0).dwForwardDest = 0)
End If
Return bHasDefaultRoute
End Function
La fonction retourne VRAI si une passerelle ets disponible.
Quelques explications sur la suppression de la boucle de parcours de la
table. Le troisième argument de GetIpForwardTable indique que l'on désire
un résultat trié dans l'ordre croissant des adresses. Donc il suffit
d'examiner la première entrée seulement. Si il y a une passerelle active,
elle sera stockée dans la première entrée, sinon, la première entrée aura
une valeur non nulle dans dwForwardDest. C'est une simplification par
rapport au code C++ de mon article et cela permet d'éviter des
manipulations pénibles à cause du fait que la structure MIB_IPFORWARDTABLE
ets de taille variable.
--
Patrick Philippot - Microsoft MVP
MainSoft Consulting Services
www.mainsoft.fr
[REPOST - Annule et remplace le message précédent]
Bonjour,
Bien, depuis le temps qu'on me demande de porter ça en VB, il faut bien
que je m'y mette... :-)
Tout d'abord faire un
Imports System.Runtime.InteropServices
Déclarer ensuite les structures nécessaires:
<Runtime.InteropServices.StructLayout(Runtime.InteropServices.LayoutKind.Sequential,
Pack:=4)> _
Public Structure MIB_IPFORWARDROW
Public dwForwardDest As System.UInt32
Public dwForwardMask As System.UInt32
Public dwForwardPolicy As System.UInt32
Public dwForwardNextHop As System.UInt32
Public dwForwardIfIndex As System.UInt32
Public dwForwardType As System.UInt32
Public dwForwardProto As System.UInt32
Public dwForwardAge As System.UInt32
Public dwForwardNextHopAS As System.UInt32
Public dwForwardMetric1 As System.UInt32
Public dwForwardMetric2 As System.UInt32
Public dwForwardMetric3 As System.UInt32
Public dwForwardMetric4 As System.UInt32
Public dwForwardMetric5 As System.UInt32
End Structure
<Runtime.InteropServices.StructLayout(Runtime.InteropServices.LayoutKind.Sequential,
Pack:=4)> _
Public Structure MIB_IPFORWARDTABLE
Public dwNumEntries As System.UInt32
<Runtime.InteropServices.MarshalAs(Runtime.InteropServices.UnmanagedType.ByValArray)>
_
Public table() As MIB_IPFORWARDROW
End Structure
Vient ensuite la fonction de test:
Faire l'import nécessaire:
<DllImport("iphlpapi.dll")> _
Public Shared Function GetIpForwardTable( _
ByRef pIpForwardTable As MIB_IPFORWARDTABLE _
, ByRef pdwSize As System.UInt32 _
, ByVal bOrder As System.UInt32 _
) As System.UInt32
End Function
et définir la fonction
Public Function CheckConnection() As Boolean
Dim pft As MIB_IPFORWARDTABLE = Nothing
Dim ptr As IntPtr = Nothing
Dim dwTableSize As Integer
Dim bHasDefaultRoute As Boolean = False
GetIpForwardTable(Nothing, dwTableSize, 0)
ptr = Marshal.AllocHGlobal(dwTableSize)
pft = CType(Marshal.PtrToStructure(ptr, GetType(MIB_IPFORWARDTABLE)),
MIB_IPFORWARDTABLE)
If GetIpForwardTable(pft, dwTableSize, 1) = 0 Then
bHasDefaultRoute = (pft.table(0).dwForwardDest = 0)
End If
Return bHasDefaultRoute
End Function
La fonction retourne VRAI si une passerelle ets disponible.
Quelques explications sur la suppression de la boucle de parcours de la
table. Le troisième argument de GetIpForwardTable indique que l'on désire
un résultat trié dans l'ordre croissant des adresses. Donc il suffit
d'examiner la première entrée seulement. Si il y a une passerelle active,
elle sera stockée dans la première entrée, sinon, la première entrée aura
une valeur non nulle dans dwForwardDest. C'est une simplification par
rapport au code C++ de mon article et cela permet d'éviter des
manipulations pénibles à cause du fait que la structure MIB_IPFORWARDTABLE
ets de taille variable.
--
Patrick Philippot - Microsoft MVP
MainSoft Consulting Services
www.mainsoft.fr
[REPOST - Annule et remplace le message précédent]
Bonjour,
Bien, depuis le temps qu'on me demande de porter ça en VB, il faut bien
que je m'y mette... :-)
Tout d'abord faire un
Imports System.Runtime.InteropServices
Déclarer ensuite les structures nécessaires:
<Runtime.InteropServices.StructLayout(Runtime.InteropServices.LayoutKind.Sequential,
Pack:=4)> _
Public Structure MIB_IPFORWARDROW
Public dwForwardDest As System.UInt32
Public dwForwardMask As System.UInt32
Public dwForwardPolicy As System.UInt32
Public dwForwardNextHop As System.UInt32
Public dwForwardIfIndex As System.UInt32
Public dwForwardType As System.UInt32
Public dwForwardProto As System.UInt32
Public dwForwardAge As System.UInt32
Public dwForwardNextHopAS As System.UInt32
Public dwForwardMetric1 As System.UInt32
Public dwForwardMetric2 As System.UInt32
Public dwForwardMetric3 As System.UInt32
Public dwForwardMetric4 As System.UInt32
Public dwForwardMetric5 As System.UInt32
End Structure
<Runtime.InteropServices.StructLayout(Runtime.InteropServices.LayoutKind.Sequential,
Pack:=4)> _
Public Structure MIB_IPFORWARDTABLE
Public dwNumEntries As System.UInt32
<Runtime.InteropServices.MarshalAs(Runtime.InteropServices.UnmanagedType.ByValArray)>
_
Public table() As MIB_IPFORWARDROW
End Structure
Vient ensuite la fonction de test:
Faire l'import nécessaire:
<DllImport("iphlpapi.dll")> _
Public Shared Function GetIpForwardTable( _
ByRef pIpForwardTable As MIB_IPFORWARDTABLE _
, ByRef pdwSize As System.UInt32 _
, ByVal bOrder As System.UInt32 _
) As System.UInt32
End Function
et définir la fonction
Public Function CheckConnection() As Boolean
Dim pft As MIB_IPFORWARDTABLE = Nothing
Dim ptr As IntPtr = Nothing
Dim dwTableSize As Integer
Dim bHasDefaultRoute As Boolean = False
GetIpForwardTable(Nothing, dwTableSize, 0)
ptr = Marshal.AllocHGlobal(dwTableSize)
pft = CType(Marshal.PtrToStructure(ptr, GetType(MIB_IPFORWARDTABLE)),
MIB_IPFORWARDTABLE)
If GetIpForwardTable(pft, dwTableSize, 1) = 0 Then
bHasDefaultRoute = (pft.table(0).dwForwardDest = 0)
End If
Return bHasDefaultRoute
End Function
La fonction retourne VRAI si une passerelle ets disponible.
Quelques explications sur la suppression de la boucle de parcours de la
table. Le troisième argument de GetIpForwardTable indique que l'on désire
un résultat trié dans l'ordre croissant des adresses. Donc il suffit
d'examiner la première entrée seulement. Si il y a une passerelle active,
elle sera stockée dans la première entrée, sinon, la première entrée aura
une valeur non nulle dans dwForwardDest. C'est une simplification par
rapport au code C++ de mon article et cela permet d'éviter des
manipulations pénibles à cause du fait que la structure MIB_IPFORWARDTABLE
ets de taille variable.
--
Patrick Philippot - Microsoft MVP
MainSoft Consulting Services
www.mainsoft.fr
Un Marshal.FreeHGlobal( ptr ) à la fin de la fonction ne serait pas de
trop non plus :-)) .
--
Patrick Philippot - Microsoft MVP
MainSoft Consulting Services
www.mainsoft.fr
"Patrick Philippot" wrote in message
news:[REPOST - Annule et remplace le message précédent]
Bonjour,
Bien, depuis le temps qu'on me demande de porter ça en VB, il faut bien
que je m'y mette... :-)
Tout d'abord faire un
Imports System.Runtime.InteropServices
Déclarer ensuite les structures nécessaires:
<Runtime.InteropServices.StructLayout(Runtime.InteropServices.LayoutKind.Sequential,
Pack:=4)> _
Public Structure MIB_IPFORWARDROW
Public dwForwardDest As System.UInt32
Public dwForwardMask As System.UInt32
Public dwForwardPolicy As System.UInt32
Public dwForwardNextHop As System.UInt32
Public dwForwardIfIndex As System.UInt32
Public dwForwardType As System.UInt32
Public dwForwardProto As System.UInt32
Public dwForwardAge As System.UInt32
Public dwForwardNextHopAS As System.UInt32
Public dwForwardMetric1 As System.UInt32
Public dwForwardMetric2 As System.UInt32
Public dwForwardMetric3 As System.UInt32
Public dwForwardMetric4 As System.UInt32
Public dwForwardMetric5 As System.UInt32
End Structure
<Runtime.InteropServices.StructLayout(Runtime.InteropServices.LayoutKind.Sequential,
Pack:=4)> _
Public Structure MIB_IPFORWARDTABLE
Public dwNumEntries As System.UInt32
<Runtime.InteropServices.MarshalAs(Runtime.InteropServices.UnmanagedType.ByValArray)>
_
Public table() As MIB_IPFORWARDROW
End Structure
Vient ensuite la fonction de test:
Faire l'import nécessaire:
<DllImport("iphlpapi.dll")> _
Public Shared Function GetIpForwardTable( _
ByRef pIpForwardTable As MIB_IPFORWARDTABLE _
, ByRef pdwSize As System.UInt32 _
, ByVal bOrder As System.UInt32 _
) As System.UInt32
End Function
et définir la fonction
Public Function CheckConnection() As Boolean
Dim pft As MIB_IPFORWARDTABLE = Nothing
Dim ptr As IntPtr = Nothing
Dim dwTableSize As Integer
Dim bHasDefaultRoute As Boolean = False
GetIpForwardTable(Nothing, dwTableSize, 0)
ptr = Marshal.AllocHGlobal(dwTableSize)
pft = CType(Marshal.PtrToStructure(ptr, GetType(MIB_IPFORWARDTABLE)),
MIB_IPFORWARDTABLE)
If GetIpForwardTable(pft, dwTableSize, 1) = 0 Then
bHasDefaultRoute = (pft.table(0).dwForwardDest = 0)
End If
Return bHasDefaultRoute
End Function
La fonction retourne VRAI si une passerelle ets disponible.
Quelques explications sur la suppression de la boucle de parcours de la
table. Le troisième argument de GetIpForwardTable indique que l'on désire
un résultat trié dans l'ordre croissant des adresses. Donc il suffit
d'examiner la première entrée seulement. Si il y a une passerelle active,
elle sera stockée dans la première entrée, sinon, la première entrée aura
une valeur non nulle dans dwForwardDest. C'est une simplification par
rapport au code C++ de mon article et cela permet d'éviter des
manipulations pénibles à cause du fait que la structure
MIB_IPFORWARDTABLE ets de taille variable.
--
Patrick Philippot - Microsoft MVP
MainSoft Consulting Services
www.mainsoft.fr
Un Marshal.FreeHGlobal( ptr ) à la fin de la fonction ne serait pas de
trop non plus :-)) .
--
Patrick Philippot - Microsoft MVP
MainSoft Consulting Services
www.mainsoft.fr
"Patrick Philippot" <patrick.philippot@mainsoft.xx.fr> wrote in message
news:eyiU8hwiGHA.4080@TK2MSFTNGP03.phx.gbl...
[REPOST - Annule et remplace le message précédent]
Bonjour,
Bien, depuis le temps qu'on me demande de porter ça en VB, il faut bien
que je m'y mette... :-)
Tout d'abord faire un
Imports System.Runtime.InteropServices
Déclarer ensuite les structures nécessaires:
<Runtime.InteropServices.StructLayout(Runtime.InteropServices.LayoutKind.Sequential,
Pack:=4)> _
Public Structure MIB_IPFORWARDROW
Public dwForwardDest As System.UInt32
Public dwForwardMask As System.UInt32
Public dwForwardPolicy As System.UInt32
Public dwForwardNextHop As System.UInt32
Public dwForwardIfIndex As System.UInt32
Public dwForwardType As System.UInt32
Public dwForwardProto As System.UInt32
Public dwForwardAge As System.UInt32
Public dwForwardNextHopAS As System.UInt32
Public dwForwardMetric1 As System.UInt32
Public dwForwardMetric2 As System.UInt32
Public dwForwardMetric3 As System.UInt32
Public dwForwardMetric4 As System.UInt32
Public dwForwardMetric5 As System.UInt32
End Structure
<Runtime.InteropServices.StructLayout(Runtime.InteropServices.LayoutKind.Sequential,
Pack:=4)> _
Public Structure MIB_IPFORWARDTABLE
Public dwNumEntries As System.UInt32
<Runtime.InteropServices.MarshalAs(Runtime.InteropServices.UnmanagedType.ByValArray)>
_
Public table() As MIB_IPFORWARDROW
End Structure
Vient ensuite la fonction de test:
Faire l'import nécessaire:
<DllImport("iphlpapi.dll")> _
Public Shared Function GetIpForwardTable( _
ByRef pIpForwardTable As MIB_IPFORWARDTABLE _
, ByRef pdwSize As System.UInt32 _
, ByVal bOrder As System.UInt32 _
) As System.UInt32
End Function
et définir la fonction
Public Function CheckConnection() As Boolean
Dim pft As MIB_IPFORWARDTABLE = Nothing
Dim ptr As IntPtr = Nothing
Dim dwTableSize As Integer
Dim bHasDefaultRoute As Boolean = False
GetIpForwardTable(Nothing, dwTableSize, 0)
ptr = Marshal.AllocHGlobal(dwTableSize)
pft = CType(Marshal.PtrToStructure(ptr, GetType(MIB_IPFORWARDTABLE)),
MIB_IPFORWARDTABLE)
If GetIpForwardTable(pft, dwTableSize, 1) = 0 Then
bHasDefaultRoute = (pft.table(0).dwForwardDest = 0)
End If
Return bHasDefaultRoute
End Function
La fonction retourne VRAI si une passerelle ets disponible.
Quelques explications sur la suppression de la boucle de parcours de la
table. Le troisième argument de GetIpForwardTable indique que l'on désire
un résultat trié dans l'ordre croissant des adresses. Donc il suffit
d'examiner la première entrée seulement. Si il y a une passerelle active,
elle sera stockée dans la première entrée, sinon, la première entrée aura
une valeur non nulle dans dwForwardDest. C'est une simplification par
rapport au code C++ de mon article et cela permet d'éviter des
manipulations pénibles à cause du fait que la structure
MIB_IPFORWARDTABLE ets de taille variable.
--
Patrick Philippot - Microsoft MVP
MainSoft Consulting Services
www.mainsoft.fr
Un Marshal.FreeHGlobal( ptr ) à la fin de la fonction ne serait pas de
trop non plus :-)) .
--
Patrick Philippot - Microsoft MVP
MainSoft Consulting Services
www.mainsoft.fr
"Patrick Philippot" wrote in message
news:[REPOST - Annule et remplace le message précédent]
Bonjour,
Bien, depuis le temps qu'on me demande de porter ça en VB, il faut bien
que je m'y mette... :-)
Tout d'abord faire un
Imports System.Runtime.InteropServices
Déclarer ensuite les structures nécessaires:
<Runtime.InteropServices.StructLayout(Runtime.InteropServices.LayoutKind.Sequential,
Pack:=4)> _
Public Structure MIB_IPFORWARDROW
Public dwForwardDest As System.UInt32
Public dwForwardMask As System.UInt32
Public dwForwardPolicy As System.UInt32
Public dwForwardNextHop As System.UInt32
Public dwForwardIfIndex As System.UInt32
Public dwForwardType As System.UInt32
Public dwForwardProto As System.UInt32
Public dwForwardAge As System.UInt32
Public dwForwardNextHopAS As System.UInt32
Public dwForwardMetric1 As System.UInt32
Public dwForwardMetric2 As System.UInt32
Public dwForwardMetric3 As System.UInt32
Public dwForwardMetric4 As System.UInt32
Public dwForwardMetric5 As System.UInt32
End Structure
<Runtime.InteropServices.StructLayout(Runtime.InteropServices.LayoutKind.Sequential,
Pack:=4)> _
Public Structure MIB_IPFORWARDTABLE
Public dwNumEntries As System.UInt32
<Runtime.InteropServices.MarshalAs(Runtime.InteropServices.UnmanagedType.ByValArray)>
_
Public table() As MIB_IPFORWARDROW
End Structure
Vient ensuite la fonction de test:
Faire l'import nécessaire:
<DllImport("iphlpapi.dll")> _
Public Shared Function GetIpForwardTable( _
ByRef pIpForwardTable As MIB_IPFORWARDTABLE _
, ByRef pdwSize As System.UInt32 _
, ByVal bOrder As System.UInt32 _
) As System.UInt32
End Function
et définir la fonction
Public Function CheckConnection() As Boolean
Dim pft As MIB_IPFORWARDTABLE = Nothing
Dim ptr As IntPtr = Nothing
Dim dwTableSize As Integer
Dim bHasDefaultRoute As Boolean = False
GetIpForwardTable(Nothing, dwTableSize, 0)
ptr = Marshal.AllocHGlobal(dwTableSize)
pft = CType(Marshal.PtrToStructure(ptr, GetType(MIB_IPFORWARDTABLE)),
MIB_IPFORWARDTABLE)
If GetIpForwardTable(pft, dwTableSize, 1) = 0 Then
bHasDefaultRoute = (pft.table(0).dwForwardDest = 0)
End If
Return bHasDefaultRoute
End Function
La fonction retourne VRAI si une passerelle ets disponible.
Quelques explications sur la suppression de la boucle de parcours de la
table. Le troisième argument de GetIpForwardTable indique que l'on désire
un résultat trié dans l'ordre croissant des adresses. Donc il suffit
d'examiner la première entrée seulement. Si il y a une passerelle active,
elle sera stockée dans la première entrée, sinon, la première entrée aura
une valeur non nulle dans dwForwardDest. C'est une simplification par
rapport au code C++ de mon article et cela permet d'éviter des
manipulations pénibles à cause du fait que la structure
MIB_IPFORWARDTABLE ets de taille variable.
--
Patrick Philippot - Microsoft MVP
MainSoft Consulting Services
www.mainsoft.fr
Ok merci
je vais tester cela
Sylo
"Patrick Philippot" a écrit dans le
message de news:Un Marshal.FreeHGlobal( ptr ) à la fin de la fonction ne serait pas de
trop non plus :-)) .
--
Patrick Philippot - Microsoft MVP
MainSoft Consulting Services
www.mainsoft.fr
"Patrick Philippot" wrote in message
news:[REPOST - Annule et remplace le message précédent]
Bonjour,
Bien, depuis le temps qu'on me demande de porter ça en VB, il faut bien
que je m'y mette... :-)
Tout d'abord faire un
Imports System.Runtime.InteropServices
Déclarer ensuite les structures nécessaires:
<Runtime.InteropServices.StructLayout(Runtime.InteropServices.LayoutKind.Sequential,
Pack:=4)> _
Public Structure MIB_IPFORWARDROW
Public dwForwardDest As System.UInt32
Public dwForwardMask As System.UInt32
Public dwForwardPolicy As System.UInt32
Public dwForwardNextHop As System.UInt32
Public dwForwardIfIndex As System.UInt32
Public dwForwardType As System.UInt32
Public dwForwardProto As System.UInt32
Public dwForwardAge As System.UInt32
Public dwForwardNextHopAS As System.UInt32
Public dwForwardMetric1 As System.UInt32
Public dwForwardMetric2 As System.UInt32
Public dwForwardMetric3 As System.UInt32
Public dwForwardMetric4 As System.UInt32
Public dwForwardMetric5 As System.UInt32
End Structure
<Runtime.InteropServices.StructLayout(Runtime.InteropServices.LayoutKind.Sequential,
Pack:=4)> _
Public Structure MIB_IPFORWARDTABLE
Public dwNumEntries As System.UInt32
<Runtime.InteropServices.MarshalAs(Runtime.InteropServices.UnmanagedType.ByValArray)>
_
Public table() As MIB_IPFORWARDROW
End Structure
Vient ensuite la fonction de test:
Faire l'import nécessaire:
<DllImport("iphlpapi.dll")> _
Public Shared Function GetIpForwardTable( _
ByRef pIpForwardTable As MIB_IPFORWARDTABLE _
, ByRef pdwSize As System.UInt32 _
, ByVal bOrder As System.UInt32 _
) As System.UInt32
End Function
et définir la fonction
Public Function CheckConnection() As Boolean
Dim pft As MIB_IPFORWARDTABLE = Nothing
Dim ptr As IntPtr = Nothing
Dim dwTableSize As Integer
Dim bHasDefaultRoute As Boolean = False
GetIpForwardTable(Nothing, dwTableSize, 0)
ptr = Marshal.AllocHGlobal(dwTableSize)
pft = CType(Marshal.PtrToStructure(ptr, GetType(MIB_IPFORWARDTABLE)),
MIB_IPFORWARDTABLE)
If GetIpForwardTable(pft, dwTableSize, 1) = 0 Then
bHasDefaultRoute = (pft.table(0).dwForwardDest = 0)
End If
Return bHasDefaultRoute
End Function
La fonction retourne VRAI si une passerelle ets disponible.
Quelques explications sur la suppression de la boucle de parcours de la
table. Le troisième argument de GetIpForwardTable indique que l'on
désire un résultat trié dans l'ordre croissant des adresses. Donc il
suffit d'examiner la première entrée seulement. Si il y a une passerelle
active, elle sera stockée dans la première entrée, sinon, la première
entrée aura une valeur non nulle dans dwForwardDest. C'est une
simplification par rapport au code C++ de mon article et cela permet
d'éviter des manipulations pénibles à cause du fait que la structure
MIB_IPFORWARDTABLE ets de taille variable.
--
Patrick Philippot - Microsoft MVP
MainSoft Consulting Services
www.mainsoft.fr
Ok merci
je vais tester cela
Sylo
"Patrick Philippot" <patrick.philippot@mainsoft.xx.fr> a écrit dans le
message de news: eNpXzkxiGHA.456@TK2MSFTNGP05.phx.gbl...
Un Marshal.FreeHGlobal( ptr ) à la fin de la fonction ne serait pas de
trop non plus :-)) .
--
Patrick Philippot - Microsoft MVP
MainSoft Consulting Services
www.mainsoft.fr
"Patrick Philippot" <patrick.philippot@mainsoft.xx.fr> wrote in message
news:eyiU8hwiGHA.4080@TK2MSFTNGP03.phx.gbl...
[REPOST - Annule et remplace le message précédent]
Bonjour,
Bien, depuis le temps qu'on me demande de porter ça en VB, il faut bien
que je m'y mette... :-)
Tout d'abord faire un
Imports System.Runtime.InteropServices
Déclarer ensuite les structures nécessaires:
<Runtime.InteropServices.StructLayout(Runtime.InteropServices.LayoutKind.Sequential,
Pack:=4)> _
Public Structure MIB_IPFORWARDROW
Public dwForwardDest As System.UInt32
Public dwForwardMask As System.UInt32
Public dwForwardPolicy As System.UInt32
Public dwForwardNextHop As System.UInt32
Public dwForwardIfIndex As System.UInt32
Public dwForwardType As System.UInt32
Public dwForwardProto As System.UInt32
Public dwForwardAge As System.UInt32
Public dwForwardNextHopAS As System.UInt32
Public dwForwardMetric1 As System.UInt32
Public dwForwardMetric2 As System.UInt32
Public dwForwardMetric3 As System.UInt32
Public dwForwardMetric4 As System.UInt32
Public dwForwardMetric5 As System.UInt32
End Structure
<Runtime.InteropServices.StructLayout(Runtime.InteropServices.LayoutKind.Sequential,
Pack:=4)> _
Public Structure MIB_IPFORWARDTABLE
Public dwNumEntries As System.UInt32
<Runtime.InteropServices.MarshalAs(Runtime.InteropServices.UnmanagedType.ByValArray)>
_
Public table() As MIB_IPFORWARDROW
End Structure
Vient ensuite la fonction de test:
Faire l'import nécessaire:
<DllImport("iphlpapi.dll")> _
Public Shared Function GetIpForwardTable( _
ByRef pIpForwardTable As MIB_IPFORWARDTABLE _
, ByRef pdwSize As System.UInt32 _
, ByVal bOrder As System.UInt32 _
) As System.UInt32
End Function
et définir la fonction
Public Function CheckConnection() As Boolean
Dim pft As MIB_IPFORWARDTABLE = Nothing
Dim ptr As IntPtr = Nothing
Dim dwTableSize As Integer
Dim bHasDefaultRoute As Boolean = False
GetIpForwardTable(Nothing, dwTableSize, 0)
ptr = Marshal.AllocHGlobal(dwTableSize)
pft = CType(Marshal.PtrToStructure(ptr, GetType(MIB_IPFORWARDTABLE)),
MIB_IPFORWARDTABLE)
If GetIpForwardTable(pft, dwTableSize, 1) = 0 Then
bHasDefaultRoute = (pft.table(0).dwForwardDest = 0)
End If
Return bHasDefaultRoute
End Function
La fonction retourne VRAI si une passerelle ets disponible.
Quelques explications sur la suppression de la boucle de parcours de la
table. Le troisième argument de GetIpForwardTable indique que l'on
désire un résultat trié dans l'ordre croissant des adresses. Donc il
suffit d'examiner la première entrée seulement. Si il y a une passerelle
active, elle sera stockée dans la première entrée, sinon, la première
entrée aura une valeur non nulle dans dwForwardDest. C'est une
simplification par rapport au code C++ de mon article et cela permet
d'éviter des manipulations pénibles à cause du fait que la structure
MIB_IPFORWARDTABLE ets de taille variable.
--
Patrick Philippot - Microsoft MVP
MainSoft Consulting Services
www.mainsoft.fr
Ok merci
je vais tester cela
Sylo
"Patrick Philippot" a écrit dans le
message de news:Un Marshal.FreeHGlobal( ptr ) à la fin de la fonction ne serait pas de
trop non plus :-)) .
--
Patrick Philippot - Microsoft MVP
MainSoft Consulting Services
www.mainsoft.fr
"Patrick Philippot" wrote in message
news:[REPOST - Annule et remplace le message précédent]
Bonjour,
Bien, depuis le temps qu'on me demande de porter ça en VB, il faut bien
que je m'y mette... :-)
Tout d'abord faire un
Imports System.Runtime.InteropServices
Déclarer ensuite les structures nécessaires:
<Runtime.InteropServices.StructLayout(Runtime.InteropServices.LayoutKind.Sequential,
Pack:=4)> _
Public Structure MIB_IPFORWARDROW
Public dwForwardDest As System.UInt32
Public dwForwardMask As System.UInt32
Public dwForwardPolicy As System.UInt32
Public dwForwardNextHop As System.UInt32
Public dwForwardIfIndex As System.UInt32
Public dwForwardType As System.UInt32
Public dwForwardProto As System.UInt32
Public dwForwardAge As System.UInt32
Public dwForwardNextHopAS As System.UInt32
Public dwForwardMetric1 As System.UInt32
Public dwForwardMetric2 As System.UInt32
Public dwForwardMetric3 As System.UInt32
Public dwForwardMetric4 As System.UInt32
Public dwForwardMetric5 As System.UInt32
End Structure
<Runtime.InteropServices.StructLayout(Runtime.InteropServices.LayoutKind.Sequential,
Pack:=4)> _
Public Structure MIB_IPFORWARDTABLE
Public dwNumEntries As System.UInt32
<Runtime.InteropServices.MarshalAs(Runtime.InteropServices.UnmanagedType.ByValArray)>
_
Public table() As MIB_IPFORWARDROW
End Structure
Vient ensuite la fonction de test:
Faire l'import nécessaire:
<DllImport("iphlpapi.dll")> _
Public Shared Function GetIpForwardTable( _
ByRef pIpForwardTable As MIB_IPFORWARDTABLE _
, ByRef pdwSize As System.UInt32 _
, ByVal bOrder As System.UInt32 _
) As System.UInt32
End Function
et définir la fonction
Public Function CheckConnection() As Boolean
Dim pft As MIB_IPFORWARDTABLE = Nothing
Dim ptr As IntPtr = Nothing
Dim dwTableSize As Integer
Dim bHasDefaultRoute As Boolean = False
GetIpForwardTable(Nothing, dwTableSize, 0)
ptr = Marshal.AllocHGlobal(dwTableSize)
pft = CType(Marshal.PtrToStructure(ptr, GetType(MIB_IPFORWARDTABLE)),
MIB_IPFORWARDTABLE)
If GetIpForwardTable(pft, dwTableSize, 1) = 0 Then
bHasDefaultRoute = (pft.table(0).dwForwardDest = 0)
End If
Return bHasDefaultRoute
End Function
La fonction retourne VRAI si une passerelle ets disponible.
Quelques explications sur la suppression de la boucle de parcours de la
table. Le troisième argument de GetIpForwardTable indique que l'on
désire un résultat trié dans l'ordre croissant des adresses. Donc il
suffit d'examiner la première entrée seulement. Si il y a une passerelle
active, elle sera stockée dans la première entrée, sinon, la première
entrée aura une valeur non nulle dans dwForwardDest. C'est une
simplification par rapport au code C++ de mon article et cela permet
d'éviter des manipulations pénibles à cause du fait que la structure
MIB_IPFORWARDTABLE ets de taille variable.
--
Patrick Philippot - Microsoft MVP
MainSoft Consulting Services
www.mainsoft.fr