cs_CanisLupus
Messages postés
3757
Date d'inscription
mardi 23 septembre 2003
Statut
Membre
Dernière intervention
13 mars 2006
21
3 févr. 2005 à 15:38
Si c'est sur les postes, alors moi j'utilise ça :
Dans un module
Private Const ERROR_SUCCESS As Long = 0
Private Const MAX_INTERFACE_NAME_LEN As Long = 256
Private Const MAXLEN_IFDESCR As Long = 256
Private Const MAXLEN_PHYSADDR As Long = 8
Private Type MIB_IFROW
wszName(0 To (MAX_INTERFACE_NAME_LEN - 1) * 2) As Byte
dwIndex As Long
dwType As Long
dwMtu As Long
dwSpeed As Long
dwPhysAddrLen As Long
bPhysAddr(0 To MAXLEN_PHYSADDR - 1) As Byte
dwAdminStatus As Long
dwOperStatus As Long
dwLastChange As Long
dwInOctets As Long
dwInUcastPkts As Long
dwInNUcastPkts As Long
dwInDiscards As Long
dwInErrors As Long
dwInUnknownProtos As Long
dwOutOctets As Long
dwOutUcastPkts As Long
dwOutNUcastPkts As Long
dwOutDiscards As Long
dwOutErrors As Long
dwOutQLen As Long
dwDescrLen As Long
bDescr(0 To MAXLEN_IFDESCR - 1) As Byte
End Type
Private Type Infos_Interface
Adresse_MAC As String
Type_Interface As String
Vitesse As String
Description As String
End Type
Public Infos() As Infos_Interface
Private Declare Function GetIfTable _
Lib "iphlpapi.dll" _
( _
ByRef pIfTable As Any, _
ByRef pdwSize As Long, _
ByVal bOrder As Long _
) As Long
Declare Sub CopyMemory _
Lib "kernel32" Alias "RtlMoveMemory" _
( _
pDst As Any, _
pSrc As Any, _
ByVal ByteLen As Long _
)
Public Sub Infos_Carte_Reseau()
Dim IPInterfaceRow As MIB_IFROW
Dim buff() As Byte
Dim cbRequired As Long
Dim nStructSize As Long
Dim nRows As Long
Dim cnt As Long
Call GetIfTable(ByVal 0&, cbRequired, 1)
If cbRequired > 0 Then
ReDim buff(0 To cbRequired - 1) As Byte
If GetIfTable(buff(0), cbRequired, 1) = ERROR_SUCCESS Then
' Sauvegarde de la longueur en octets de IPInterfaceRow
nStructSize = LenB(IPInterfaceRow)
' Nombre d'entrées de la table (nb d'interfaces réseau détectées)
CopyMemory nRows, buff(0), 4
ReDim Infos(nRows)
For cnt = 1 To nRows
DoEvents
' Type d'interface pour chaque entrée de la table
CopyMemory IPInterfaceRow, buff(4 + (cnt - 1) * nStructSize), nStructSize
' Adresse mac
Infos(cnt).Adresse_MAC = Replace(Format(Hex(IPInterfaceRow.bPhysAddr(0)), "@@"), " ", "0") & " " & _
Replace(Format(Hex(IPInterfaceRow.bPhysAddr(1)), "@@"), " ", "0") & " " & _
Replace(Format(Hex(IPInterfaceRow.bPhysAddr(2)), "@@"), " ", "0") & " " & _
Replace(Format(Hex(IPInterfaceRow.bPhysAddr(3)), "@@"), " ", "0") & " " & _
Replace(Format(Hex(IPInterfaceRow.bPhysAddr(4)), "@@"), " ", "0") & " " & _
Replace(Format(Hex(IPInterfaceRow.bPhysAddr(5)), "@@"), " ", "0")
Next cnt
End If
End If
End Sub
Et tu interroges comme ça :
Dim i As Integer
Infos_Carte_Reseau
For i = 1 To UBound(Infos)
MsgBox Infos(i).Adresse_MAC
Next
Explications : il peut y avoir plusieurs cartes réseau, voire des cartes virtuelles. Chez moi, c'est le plus souvent la dernière de la liste qui est la bonne.
Cordialement, CanisLupus