马大哈 发表于 2011-4-25 11:56:36

【分享】马大哈系列功能模块----取得本机IP地址列表(VB6.0代码)

在CSDN的这个帖子里见到了此需求.

有时需要取得本机的IP地址列表,此时可以调用ipconfig.exe,但不方便;那就使用API:GetIpAddrTable来取得吧.

我写了一个封装,调用GetIPList()就能获得当前所有的IP地址列表,例子:Dim I as long,IPs() as string

ips=GetIPList
for i=0 to ubound(ips)
    debug.print ips(i)
next模块关键代码:Public Function GetIPList() As String()
    '取得本机所有IP地址
    '
    '返回值:
    '       字符串数组,包含本机所有的IP地址
    '
    Dim I As Long, lRet As Long, Buff() As Byte, lSize As Long, lPtr As Long, sTmp As String
    Dim IPADT As MIB_IPADDRTABLE, WD As WSADATA, OutBuff() As String
   
    On Error GoTo Err
   
    ReDim Buff(0)                                             '只分配1字节
    lRet = GetIpAddrTable(VarPtr(Buff(0)), lSize, True)         '首次调用,缓冲区肯定不足
    If lRet = ERROR_INSUFFICIENT_BUFFER Then
      ReDim Buff(lSize - 1)                                 '这里已经得到了所需要的缓冲区大小
      lRet = GetIpAddrTable(VarPtr(Buff(0)), lSize, True)   '再次调用
    End If
    If lRet = NO_ERROR Then
      Call CopyMemory(VarPtr(IPADT.dEntrys), VarPtr(Buff(0)), UBound(Buff) + 1)       '复制到结构中
      If WSAStartup(&H101, WD) = 0 Then
            ReDim OutBuff(IPADT.dEntrys - 1)                  '.dEntrys中是IP地址数量
            For I = 0 To IPADT.dEntrys - 1
                lPtr = inet_ntoa(IPADT.mIPInfo(I).dwAddr)       '转换IP地址LONG值,得到指向X.X.X.X格式IP地址字符串的指针
                sTmp = Space(lstrlen(lPtr))                     '分配缓冲区
                Call CopyMemory(StrPtr(sTmp), lPtr, Len(sTmp))'复制字符串
                OutBuff(I) = Trim(Replace(StrConv(sTmp, vbUnicode), Chr(0), Chr(32)))       '去掉NULL并保存结果
               
                Debug.Print "IP = " & OutBuff(I)
            Next
      End If
    End If
    GetIPList = OutBuff
Err:
    Call WSACleanup
End Function下载地址:

点击下载
页: [1]
查看完整版本: 【分享】马大哈系列功能模块----取得本机IP地址列表(VB6.0代码)