所有网卡的全部IP试过用注册表读取的方式,不过操作注册表有点问题,不能读出Reg_multi_sz值有其它方法么(非注册表读取)?

解决方案 »

  1.   

    Private Const MAX_ADAPTER_NAME_LENGTH         As Long = 256
    Private Const MAX_ADAPTER_DESCRIPTION_LENGTH  As Long = 128
    Private Const MAX_ADAPTER_ADDRESS_LENGTH      As Long = 8
    Private Const ERROR_SUCCESS  As Long = 0Private Type IP_ADDRESS_STRING
        IpAddr(0 To 15)  As Byte
    End TypePrivate Type IP_MASK_STRING
        IpMask(0 To 15)  As Byte
    End TypePrivate Type IP_ADDR_STRING
        dwNext     As Long
        IpAddress  As IP_ADDRESS_STRING
        IpMask     As IP_MASK_STRING
        dwContext  As Long
    End TypePrivate Type IP_ADAPTER_INFO
      dwNext                As Long
      ComboIndex            As Long  '保留
      sAdapterName(0 To (MAX_ADAPTER_NAME_LENGTH + 3))        As Byte
      sDescription(0 To (MAX_ADAPTER_DESCRIPTION_LENGTH + 3)) As Byte
      dwAddressLength       As Long
      sIPAddress(0 To (MAX_ADAPTER_ADDRESS_LENGTH - 1))       As Byte
      dwIndex               As Long
      uType                 As Long
      uDhcpEnabled          As Long
      CurrentIpAddress      As Long
      IpAddressList         As IP_ADDR_STRING
      GatewayList           As IP_ADDR_STRING
      DhcpServer            As IP_ADDR_STRING
      bHaveWins             As Long
      PrimaryWinsServer     As IP_ADDR_STRING
      SecondaryWinsServer   As IP_ADDR_STRING
      LeaseObtained         As Long
      LeaseExpires          As Long
    End Type
    Private Const NCBASTAT = &H33
    Private Const NCBNAMSZ = 16
    Private Const HEAP_ZERO_MEMORY = &H8
    Private Const HEAP_GENERATE_EXCEPTIONS = &H4
    Private Const NCBRESET = &H32Private Type NCB
      ncb_command As Byte
      ncb_retcode As Byte
      ncb_lsn As Byte
      ncb_num As Byte
      ncb_buffer As Long
      ncb_length As Integer
      ncb_callname As String * NCBNAMSZ
      ncb_name As String * NCBNAMSZ
      ncb_rto As Byte
      ncb_sto As Byte
      ncb_post As Long
      ncb_lana_num As Byte
      ncb_cmd_cplt As Byte
      ncb_reserve(9) As Byte ' Reserved, must be 0
      ncb_event As Long
    End TypePrivate Type ADAPTER_STATUS
      adapter_address(5) As Byte
      rev_major As Byte
      reserved0 As Byte
      adapter_type As Byte
      rev_minor As Byte
      duration As Integer
      frmr_recv As Integer
      frmr_xmit As Integer
      iframe_recv_err As Integer
      xmit_aborts As Integer
      xmit_success As Long
      recv_success As Long
      iframe_xmit_err As Integer
      recv_buff_unavail As Integer
      t1_timeouts As Integer
      ti_timeouts As Integer
      Reserved1 As Long
      free_ncbs As Integer
      max_cfg_ncbs As Integer
      max_ncbs As Integer
      xmit_buf_unavail As Integer
      max_dgram_size As Integer
      pending_sess As Integer
      max_cfg_sess As Integer
      max_sess As Integer
      max_sess_pkt_size As Integer
      name_count As Integer
    End TypePrivate Type NAME_BUFFER
      Name As String * NCBNAMSZ
      name_num As Integer
      name_flags As Integer
    End TypePrivate Type ASTAT
      adapt As ADAPTER_STATUS
      NameBuff(30) As NAME_BUFFER
    End TypePrivate Declare Function GetAdaptersInfo Lib "iphlpapi.dll" (pTcpTable As Any, pdwSize As Long) As Long
    Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (dst As Any, src As Any, ByVal bcount As Long)
    Private Declare Function Netbios Lib "netapi32.dll" (pncb As NCB) As Byte
    Private Declare Function GetProcessHeap Lib "kernel32" () As Long
    Private Declare Function HeapAlloc Lib "kernel32" (ByVal hHeap As Long, ByVal dwFlags As Long, ByVal dwBytes As Long) As Long
    Private Declare Function HeapFree Lib "kernel32" (ByVal hHeap As Long, ByVal dwFlags As Long, lpMem As Any) As Long
     Public Function LocalIPAddress() As String
       Dim cbRequired  As Long
       Dim buff()      As Byte
       Dim Adapter     As IP_ADAPTER_INFO
       Dim AdapterStr  As IP_ADDR_STRING
       Dim ptr1        As Long
       Dim sIPAddr     As String
       Dim found       As Boolean
       Dim iFound As Integer
       iFound = 0
       sIPAddr = ""
       Dim sReturn As String
       sReturn = ""
       Call GetAdaptersInfo(ByVal 0&, cbRequired)
       If cbRequired > 0 Then
          ReDim buff(0 To cbRequired - 1) As Byte
          If GetAdaptersInfo(buff(0), cbRequired) = ERROR_SUCCESS Then
            '获取存放在buff()中的数据的指针
             ptr1 = VarPtr(buff(0))
             Do While (ptr1 <> 0)
               '将第一个网卡的数据转换到IP_ADAPTER_INFO结构中
                CopyMemory Adapter, ByVal ptr1, LenB(Adapter)
                With Adapter
                  'IpAddress.IpAddr成员给出了DHCP的IP地址
                   sIPAddr = TrimNull(StrConv(.IpAddressList.IpAddress.IpAddr, vbUnicode))
                    If Len(sIPAddr) > 0 Then
                      iFound = iFound + 1
                      sReturn = sReturn & "第" & iFound & "个IP地址:" & sIPAddr & vbCrLf
                      found = True
                     ' Exit Do
                   End If
                   ptr1 = .dwNext
                End With  'With Adapter
            '不再有网卡时,ptr1的值为0
             Loop  'Do While (ptr1 <> 0)
          End If  'If GetAdaptersInfo
       End If  'If cbRequired > 0
      '返回结果字符串
       LocalIPAddress = sReturn
    End Function
      

  2.   


    http://community.csdn.net/Expert/TopicView.asp?id=4700452
    好像是同一个类出来的结帖,给分.