|
在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
复制代码 下载地址:
点击下载 |
|