以下是列举本机所有网卡的ip地址,并加入到combobox下拉列表中,可以作为一个模块使用.给分好了,我还没赚过分呢。刚注册不久的,交流交流吧。 Option ExplicitPrivate Const WS_VERSION_REQD = &H101 Private Const WS_VERSION_MAJOR = WS_VERSION_REQD \ &H100 And &HFF& Private Const WS_VERSION_MINOR = WS_VERSION_REQD And &HFF& Private Const MIN_SOCKETS_REQD = 1 Private Const SOCKET_ERROR = -1 Private Const WSADescription_Len = 256 Private Const WSASYS_Status_Len = 128Private Type HOSTENT hName As Long hAliases As Long hAddrType As Integer hLength As Integer hAddrList As Long End TypePrivate Type WSADATA wversion As Integer wHighVersion As Integer szDescription(0 To WSADescription_Len) As Byte szSystemStatus(0 To WSASYS_Status_Len) As Byte iMaxSockets As Integer iMaxUdpDg As Integer lpszVendorInfo As Long End TypePrivate Declare Function WSAGetLastError Lib "WSOCK32.DLL" () As Long
Private Declare Function WSAStartup Lib "WSOCK32.DLL" (ByVal _ wVersionRequired As Integer, lpWSAData As WSADATA) As Long
Private Declare Function WSACleanup Lib "WSOCK32.DLL" () As Long
Private Declare Function gethostname Lib "WSOCK32.DLL" (ByVal hostname$, _ ByVal HostLen As Long) As Long
Private Declare Function gethostbyname Lib "WSOCK32.DLL" (ByVal _ hostname$) As Long
Private Declare Sub RtlMoveMemory Lib "KERNEL32" (hpvDest As Any, ByVal _ hpvSource&, ByVal cbCopy&)Function hibyte(ByVal wParam As Integer) hibyte = wParam \ &H100 And &HFF&End FunctionFunction lobyte(ByVal wParam As Integer) lobyte = wParam And &HFF&End Function Sub SocketsInitialize() Dim WSAD As WSADATA Dim iReturn As Integer Dim sLowByte As String, sHighByte As String, sMsg As String iReturn = WSAStartup(WS_VERSION_REQD, WSAD) If iReturn <> 0 Then MsgBox "Winsock.dll is not responding." End End If If lobyte(WSAD.wversion) < WS_VERSION_MAJOR Or (lobyte(WSAD.wversion) = _ WS_VERSION_MAJOR And hibyte(WSAD.wversion) < WS_VERSION_MINOR) Then sHighByte = Trim$(Str$(hibyte(WSAD.wversion))) sLowByte = Trim$(Str$(lobyte(WSAD.wversion))) sMsg = "Windows Sockets version " & sLowByte & "." & sHighByte sMsg = sMsg & " is not supported by winsock.dll " MsgBox sMsg End End If 'iMaxSockets is not used in winsock 2. So the following check is only 'necessary for winsock 1. If winsock 2 is requested, 'the following check can be skipped. 'If WSAD.iMaxSockets < MIN_SOCKETS_REQD Then ' sMsg = "This application requires a minimum of " ' sMsg = sMsg & Trim$(Str$(MIN_SOCKETS_REQD)) & " supported sockets." ' MsgBox sMsg ' End 'End IfEnd SubSub SocketsCleanup() Dim lReturn As Long lReturn = WSACleanup() If lReturn <> 0 Then MsgBox "Socket error " & Trim$(Str$(lReturn)) & " occurred in Cleanup " End End IfEnd SubSub GetAllLocalIPAddr(cmblocalIPs As ComboBox) Dim hostname As String * 256 Dim hostent_addr As Long Dim host As HOSTENT Dim hostip_addr As Long Dim temp_ip_address() As Byte Dim i As Integer Dim ip_address As String
If gethostname(hostname, 256) = SOCKET_ERROR Then MsgBox "Windows Sockets error " & Str(WSAGetLastError()) Exit Sub Else hostname = Trim$(hostname) End If hostent_addr = gethostbyname(hostname) If hostent_addr = 0 Then MsgBox "Winsock.dll is not responding." Exit Sub End If RtlMoveMemory host, hostent_addr, LenB(host) RtlMoveMemory hostip_addr, host.hAddrList, 4 'MsgBox hostname 'get all of the IP address if machine is multi-homed Do ReDim temp_ip_address(1 To host.hLength) RtlMoveMemory temp_ip_address(1), hostip_addr, host.hLength For i = 1 To host.hLength ip_address = ip_address & temp_ip_address(i) & "." Next ip_address = Mid$(ip_address, 1, Len(ip_address) - 1) 'MsgBox ip_address cmblocalIPs.AddItem ip_address ip_address = "" host.hAddrList = host.hAddrList + LenB(host.hAddrList) RtlMoveMemory hostip_addr, host.hAddrList, 4 Loop While (hostip_addr <> 0)End Sub
TO All我真的有些哭笑不得。lxcc(虫莲)的方法是最简单的方式,也是最直接的方法。 通过API也是可以查到本机IP的。而我用的方法是解决楼主使用ipconfig>c:\myip.txt,不能生成myip.txt文件的问题,楼主既然说了要分析myip.txt,那我的答案也不能说是错的吧。我不是为了这几个分,虫子知道,我把名字都改成"Cooly(☆回答问题不要分儿☆)",可是对与错是本质的区别。我不想再说什么了~~~~
shell "c:\winnt\system32\cmd.exe /c ipconfig>c:\myip.txt",vbHide
msgbox winsock1.localip
Option ExplicitPrivate Const WS_VERSION_REQD = &H101
Private Const WS_VERSION_MAJOR = WS_VERSION_REQD \ &H100 And &HFF&
Private Const WS_VERSION_MINOR = WS_VERSION_REQD And &HFF&
Private Const MIN_SOCKETS_REQD = 1
Private Const SOCKET_ERROR = -1
Private Const WSADescription_Len = 256
Private Const WSASYS_Status_Len = 128Private Type HOSTENT
hName As Long
hAliases As Long
hAddrType As Integer
hLength As Integer
hAddrList As Long
End TypePrivate Type WSADATA
wversion As Integer
wHighVersion As Integer
szDescription(0 To WSADescription_Len) As Byte
szSystemStatus(0 To WSASYS_Status_Len) As Byte
iMaxSockets As Integer
iMaxUdpDg As Integer
lpszVendorInfo As Long
End TypePrivate Declare Function WSAGetLastError Lib "WSOCK32.DLL" () As Long
Private Declare Function WSAStartup Lib "WSOCK32.DLL" (ByVal _
wVersionRequired As Integer, lpWSAData As WSADATA) As Long
Private Declare Function WSACleanup Lib "WSOCK32.DLL" () As Long
Private Declare Function gethostname Lib "WSOCK32.DLL" (ByVal hostname$, _
ByVal HostLen As Long) As Long
Private Declare Function gethostbyname Lib "WSOCK32.DLL" (ByVal _
hostname$) As Long
Private Declare Sub RtlMoveMemory Lib "KERNEL32" (hpvDest As Any, ByVal _
hpvSource&, ByVal cbCopy&)Function hibyte(ByVal wParam As Integer) hibyte = wParam \ &H100 And &HFF&End FunctionFunction lobyte(ByVal wParam As Integer) lobyte = wParam And &HFF&End Function
Sub SocketsInitialize()
Dim WSAD As WSADATA
Dim iReturn As Integer
Dim sLowByte As String, sHighByte As String, sMsg As String iReturn = WSAStartup(WS_VERSION_REQD, WSAD) If iReturn <> 0 Then
MsgBox "Winsock.dll is not responding."
End
End If If lobyte(WSAD.wversion) < WS_VERSION_MAJOR Or (lobyte(WSAD.wversion) = _
WS_VERSION_MAJOR And hibyte(WSAD.wversion) < WS_VERSION_MINOR) Then
sHighByte = Trim$(Str$(hibyte(WSAD.wversion)))
sLowByte = Trim$(Str$(lobyte(WSAD.wversion)))
sMsg = "Windows Sockets version " & sLowByte & "." & sHighByte
sMsg = sMsg & " is not supported by winsock.dll "
MsgBox sMsg
End
End If 'iMaxSockets is not used in winsock 2. So the following check is only
'necessary for winsock 1. If winsock 2 is requested,
'the following check can be skipped. 'If WSAD.iMaxSockets < MIN_SOCKETS_REQD Then
' sMsg = "This application requires a minimum of "
' sMsg = sMsg & Trim$(Str$(MIN_SOCKETS_REQD)) & " supported sockets."
' MsgBox sMsg
' End
'End IfEnd SubSub SocketsCleanup()
Dim lReturn As Long lReturn = WSACleanup() If lReturn <> 0 Then
MsgBox "Socket error " & Trim$(Str$(lReturn)) & " occurred in Cleanup "
End
End IfEnd SubSub GetAllLocalIPAddr(cmblocalIPs As ComboBox)
Dim hostname As String * 256
Dim hostent_addr As Long
Dim host As HOSTENT
Dim hostip_addr As Long
Dim temp_ip_address() As Byte
Dim i As Integer
Dim ip_address As String
If gethostname(hostname, 256) = SOCKET_ERROR Then
MsgBox "Windows Sockets error " & Str(WSAGetLastError())
Exit Sub
Else
hostname = Trim$(hostname)
End If hostent_addr = gethostbyname(hostname) If hostent_addr = 0 Then
MsgBox "Winsock.dll is not responding."
Exit Sub
End If RtlMoveMemory host, hostent_addr, LenB(host)
RtlMoveMemory hostip_addr, host.hAddrList, 4 'MsgBox hostname 'get all of the IP address if machine is multi-homed Do
ReDim temp_ip_address(1 To host.hLength)
RtlMoveMemory temp_ip_address(1), hostip_addr, host.hLength For i = 1 To host.hLength
ip_address = ip_address & temp_ip_address(i) & "."
Next
ip_address = Mid$(ip_address, 1, Len(ip_address) - 1) 'MsgBox ip_address
cmblocalIPs.AddItem ip_address ip_address = ""
host.hAddrList = host.hAddrList + LenB(host.hAddrList)
RtlMoveMemory hostip_addr, host.hAddrList, 4
Loop While (hostip_addr <> 0)End Sub
另两位的方法我去试一下。Cooly(☆回答问题不要分儿☆) 你是不是真的不要分?: )
通过API也是可以查到本机IP的。而我用的方法是解决楼主使用ipconfig>c:\myip.txt,不能生成myip.txt文件的问题,楼主既然说了要分析myip.txt,那我的答案也不能说是错的吧。我不是为了这几个分,虫子知道,我把名字都改成"Cooly(☆回答问题不要分儿☆)",可是对与错是本质的区别。我不想再说什么了~~~~