Option Explicit ' Manejo de memoria ' Const MEM_COMMIT As Long = &H1000 Const MEM_RELEASE As Long = &H8000 Const PAGE_READWRITE As Long = &H4 Public Const MAX_ADAPTER_NAME As Integer = 128 Public Const MAX_HOSTNAME_LEN As Integer = 128 Public Const MAX_DOMAIN_NAME_LEN As Integer = 128 Public Const MAX_SCOPE_ID_LEN As Integer = 256 Public Const MAX_ADAPTER_DESCRIPTION_LENGTH As Integer = 128 Public Const MAX_ADAPTER_NAME_LENGTH As Integer = 256 Public Const MAX_ADAPTER_ADDRESS_LENGTH As Integer = 8 Public Const DEFAULT_MINIMUM_ENTITIES As Integer = 32 Public Const ERROR_BUFFER_OVERFLOW As Integer = 111 Public Const ERROR_SUCCESS As Integer = 0 'Different Adapter types as defined in IPifcons.h Public Const MIB_IF_TYPE_OTHER As Integer = 1 Public Const MIB_IF_TYPE_ETHERNET As Integer = 6 Public Const MIB_IF_TYPE_TOKENRING As Integer = 9 Public Const MIB_IF_TYPE_FDDI As Integer = 15 Public Const MIB_IF_TYPE_PPP As Integer = 23 Public Const MIB_IF_TYPE_LOOPBACK As Integer = 24 Public Const MIB_IF_TYPE_SLIP As Integer = 28 Public Type IP_ADDR_STRING NextPointer As Long IPAddressString(16) As Byte IPMaskString(16) As Byte Context As Integer End Type Public Type IP_ADAPTER_INFO NextPointer As Long ComboIndex As Integer AdapterName(MAX_ADAPTER_NAME_LENGTH + 4) As Byte Description(MAX_ADAPTER_DESCRIPTION_LENGTH + 4) As Byte AddressLength As Integer Address(1 To MAX_ADAPTER_ADDRESS_LENGTH) As Byte Index As Integer Type As Integer DhcpEnabled As Integer CurrentIPAddress As Long ' Reservado. IPAddressList As IP_ADDR_STRING GatewayList As IP_ADDR_STRING DhcpServer As IP_ADDR_STRING HaveWins As Boolean PrimaryWinsServer As IP_ADDR_STRING SecondaryWinsServer As IP_ADDR_STRING LeaseObtained As Integer LeaseExpires As Integer End Type Public Declare Function GetAdaptersInfo Lib "IPHLPAPI.dll" (ByVal pAdapterInfo As Long, ByRef pOutBufLen As Long) As Long Declare Function VirtualAlloc Lib "kernel32.dll" (ByVal lpAddress As Long, ByVal dwSize As Long, ByVal flAllocationType As Long, ByVal flProtect As Long) As Long Declare Function VirtualFree Lib "kernel32.dll" (ByVal lpAddress As Long, ByVal dwSize As Long, ByVal dwFreeType As Long) As Long Function GetMacAddressList() As String Dim lpAdapter As IP_ADAPTER_INFO Dim lBuffer&, lSize& Dim sMac$, sChar$ Dim r&, i% lSize = Len(lpAdapter) * 16 lBuffer = VirtualAlloc(0&, lSize, MEM_COMMIT, PAGE_READWRITE) r = GetAdaptersInfo(lBuffer, lSize) Call CopyMemory(lpAdapter, ByVal lBuffer, ByVal Len(lpAdapter)) Do For i = (MAX_ADAPTER_ADDRESS_LENGTH - lpAdapter.AddressLength + 1) To MAX_ADAPTER_ADDRESS_LENGTH sChar = Hex$(lpAdapter.Address(i)) If (lpAdapter.Address(i) < 10) Then sChar = "0" & sChar If (i < (lpAdapter.AddressLength + 2)) Then sChar = sChar & "-" sMac = sMac & sChar Next sMac = sMac & " " If (lpAdapter.NextPointer = 0) Then Exit Do Call CopyMemory(lpAdapter, ByVal lpAdapter.NextPointer, ByVal Len(lpAdapter)) Loop r = VirtualFree(lBuffer, 0&, MEM_RELEASE) GetMacAddressList = RTrim$(sMac) End Function Function GetMacAddress(ByVal Index As Integer) As String Dim sData$() sData = Split(GetMacAddressList, " ") GetMacAddress = sData(Index - 1) End Function Function MacLongLo(ByVal Index As Integer) As Long MacLongLo = Val("&H" & Mid$(Replace$(GetMacAddress(Index), "-", vbNullString), 7)) End Function Function MacLongHi(ByVal Index As Integer) As Long MacLongHi = Val("&H" & Left$(Replace$(GetMacAddress(Index), "-", vbNullString), 6)) End Function