如何在VB6中获取本地IP地址而不使用Winsock控件
我不想使用或需要Winsock的原因是我的应用程序应该可以离线工作。
我对VB6有点陌生,我的搜索没有结果。我想我需要一些WinAPI和任何指针或代码示例都将不胜感激。
这是我喜欢使用的一个函数,不需要API:
Public Function getIP()
Dim WMI As Object
Dim qryWMI As Object
Dim Item As Variant
Set WMI = GetObject("winmgmts:\\.\root\cimv2")
Set qryWMI = WMI.ExecQuery("SELECT * FROM Win32_NetworkAdapterConfiguration " & _
"WHERE IPEnabled = True")
For Each Item In qryWMI
getIP = Item.IPAddress(0)
Next
Set WMI = Nothing
Set qryWMI = Nothing
End Function
以下内容来自:VB函数查找IP地址
Private Declare Function GetIpAddrTable_API Lib "IpHlpApi" Alias "GetIpAddrTable" (pIPAddrTable As Any, pdwSize As Long, ByVal bOrder As Long) As Long
' Returns an array with the local IP addresses (as strings).
' Author: Christian d'Heureuse, www.source-code.biz
Public Function GetIpAddrTable()
Dim Buf(0 To 511) As Byte
Dim BufSize As Long: BufSize = UBound(Buf) + 1
Dim rc As Long
rc = GetIpAddrTable_API(Buf(0), BufSize, 1)
If rc <> 0 Then Err.Raise vbObjectError, , "GetIpAddrTable failed with return value " & rc
Dim NrOfEntries As Integer: NrOfEntries = Buf(1) * 256 + Buf(0)
If NrOfEntries = 0 Then GetIpAddrTable = Array(): Exit Function
ReDim IpAddrs(0 To NrOfEntries - 1) As String
Dim i As Integer
For i = 0 To NrOfEntries - 1
Dim j As Integer, s As String: s = ""
For j = 0 To 3: s = s & IIf(j > 0, ".", "") & Buf(4 + i * 24 + j): Next
IpAddrs(i) = s
Next
GetIpAddrTable = IpAddrs
End Function
' Test program for GetIpAddrTable.
Public Sub Test()
Dim IpAddrs
IpAddrs = GetIpAddrTable
Debug.Print "Nr of IP addresses: " & UBound(IpAddrs) - LBound(IpAddrs) + 1
Dim i As Integer
For i = LBound(IpAddrs) To UBound(IpAddrs)
Debug.Print IpAddrs(i)
Next
End Sub
我在我的电脑上测试了它,结果有两个IP地址。通常情况下,我会认为第二个是我的实际IP地址。