VB怎么 获得局域网内的其他所有电脑的IP地址???

作者&投稿:连邓 (若有异议请与网页底部的电邮联系)
vb 获取局域网IP的问题??~

Option Explicit
Const REG_SZ As Long = 1
Const HKEY_LOCAL_MACHINE = &H80000002

Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
Private Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" _
(ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
Private Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" _
(ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
Private Declare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" _
(ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, _
ByVal dwType As Long, lpData As Any, ByVal cbData As Long) As Long
Private Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" _
(ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, _
lpType As Long, lpData As Any, lpcbData As Long) As Long
Private Declare Function RegEnumKey Lib "advapi32.dll" Alias "RegEnumKeyA" (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpName As String, ByVal cbName As Long) As Long
Dim aaa As String


Private Sub Command1_Click()
Dim hKey As Long, hKey1 As Long, hKey2 As Long, ret As Long, ret1 As Long, lenData As Long, typeData As Long
Dim Name As String, name1 As String, name2 As String, s As String, S1 As String
Dim idx As Integer
idx = 0
Name = String(256, Chr(0))
RegCreateKey HKEY_LOCAL_MACHINE, "System\CurrentControlSet\Services\Class\NetTrans", hKey
Text1.Text = hKey
Do
ret = RegEnumKey(hKey, idx, Name, Len(Name))
If ret = 0 Then
aaa = Left(Name, InStr(Name, Chr(0)) - 1)
aaa = "System\CurrentControlSet\Services\Class\NetTrans\" & aaa
ret = RegOpenKey(HKEY_LOCAL_MACHINE, aaa, hKey)
'获得IP地址
If ret = 0 Then
name1 = "IPAddress"
name2 = "IPMask"
ret = RegQueryValueEx(hKey, name1, 0, typeData, ByVal vbNullString, lenData)
s = String(lenData, Chr(0))
RegQueryValueEx hKey, name1, 0, typeData, ByVal s, lenData
If s "" Then s = Left(s, InStr(s, Chr(0)) - 1)
'获得子网掩码
ret1 = RegQueryValueEx(hKey, name2, 0, typeData, ByVal vbNullString, lenData)
S1 = String(lenData, Chr(0))
RegQueryValueEx hKey, name2, 0, typeData, ByVal S1, lenData
If S1 "" Then S1 = Left(S1, InStr(S1, Chr(0)) - 1)
If Val(s) > 0 Then
Text1.Text = s
Text2.Text = S1
Command2.Enabled = True
Exit Sub
End If
End If
idx = idx + 1
End If
Loop Until ret 0
End Sub
Private Sub Command2_Click()
Dim hKey As Long
If Text1.Text "" Then
RegCreateKey HKEY_LOCAL_MACHINE, aaa, hKey
' 修改IP地址
RegSetValueEx hKey, "IPAddress", 0, REG_SZ, ByVal Text1.Text, 13
' 修改子网掩码
RegSetValueEx hKey, "IPMask", 0, REG_SZ, ByVal Text2.Text, 13
RegCloseKey hKey
End If
End Sub

Private Sub Command3_Click()
End
End Sub

调用API函数来实现就可以了!!
获取局域网所有主机的机器名代码:
Dim Root As DirectoryEntry = New DirectoryEntry("WinNT:")
Dim Domains As DirectoryEntries = Root.Children
Domains.SchemaFilter.Add("domain")
Dim domain As New DirectoryEntry
Dim Computers As DirectoryEntry
For Each domain In root.Children
For Each computers In domain.Children
If (computers.Name "Schema") Then
ListBox1.Items.Add(Computers.Name)
End If
Next
Next
通过主机名获取IP的代码,NameStr是我自己定的变量:
IPAddress.Parse(Dns.GetHostByName(NameStr).AddressLis(0).ToString

给你个源代码地址:http://www.moon-soft.com/download/soft/509.htm

可以获取IP
ption Explicit

Private 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 = 128

Private Type HOSTENT
hName As Long
hAliases As Long
hAddrType As Integer
hLength As Integer
hAddrList As Long
End Type

Private 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 Type

Private Declare Function WSAGetLastError Lib "WSOCK32.DLL" () As Long
Private Declare Function WSAStartup Lib "WSOCK32.DLL" (ByVal wVersionRequired&, 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&)

Private Function hibyte(ByVal wParam As Integer)
hibyte = wParam \ &H100 And &HFF&
End Function

Private Function lobyte(ByVal wParam As Integer)
lobyte = wParam And &HFF&
End Function

Private 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
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
'Debug.Print sMsg
'sMsg = sMsg & " winsock.dll tarafindan desteklenmiyor. "
'MsgBox sMsg
'End
End If
Else
'Debug.Print "Winsock.dll Error."
End If

End Sub

Public Function GetCurrentIP(ByVal blnExternalIP As Boolean) As String

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
Dim IP As String
Dim Internal As String
Dim EXTERNAL As String

If gethostname(hostname, 256) <> SOCKET_ERROR Then
hostname = Trim$(hostname)

hostent_addr = gethostbyname(hostname)

If hostent_addr <> 0 Then
RtlMoveMemory host, hostent_addr, LenB(host)
RtlMoveMemory hostip_addr, host.hAddrList, 4

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)

' Return Both LAN and External IP Fix
' Master Yoda 30-05-2000
' ##########################################
' HERE'S THE PROBLEM!!!
'TheIP = TheIP + ip_address
' ##########################################
' HERE'S THE FIX!!!
Internal = IP ' Send ONLY the External IP to the CurrentIP Function
EXTERNAL = ip_address ' Send the External IP to the function parameter External
IP = ip_address ' Send LAN IP to the function para Internal

' You don't really need to return parameters,
' it just allows you to get both IPs :)
' ##########################################

ip_address = ""
host.hAddrList = host.hAddrList + LenB(host.hAddrList)
RtlMoveMemory hostip_addr, host.hAddrList, 4
Loop While (hostip_addr <> 0)

If blnExternalIP = True Then
GetCurrentIP = EXTERNAL
Else
GetCurrentIP = Internal
End If
Else
'Debug.Print "Winsock.dll error."

GetCurrentIP = ""
End If
Else
'Debug.Print "Windows Socket Error " & Str(WSAGetLastError())

GetCurrentIP = ""
End If

End Function

Private Sub SocketsCleanup()

Dim lReturn As Long

lReturn = WSACleanup()

If lReturn <> 0 Then
'MsgBox "Socket Error " & Trim$(Str$(lReturn)) & " occurred In Cleanup "
End If
End Sub

Private Sub Class_Initialize()

SocketsInitialize

End Sub

Private Sub Class_Terminate()

SocketsCleanup

End Sub
_________


东辽县15510938449: VB怎么 获得局域网内的其他所有电脑的IP地址??? -
林版先辰: 可以获取IP ption Explicit Private 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 ...

东辽县15510938449: 某台电脑怎么获得它所在的局域网内的其他所有电脑的IP地址??? -
林版先辰: 可以用相应的辅助软件,比如: 局域网查看工具(LanSee)V1.59 这是一款黑客工具软件,可以查看到局域网内所有用户有IP地址、MAC地址、计算机名、所在工作组、登录用户名.还可以使用IP地址打开某台计算机,进行文件查找、复制,...

东辽县15510938449: vb 获取局域网内所有IP -
林版先辰: 调用API函数来实现就可以了!! 获取局域网所有主机的机器名代码: Dim Root As DirectoryEntry = New DirectoryEntry("WinNT:") Dim Domains As DirectoryEntries = Root.Children Domains.SchemaFilter.Add("domain") Dim domain As ...

东辽县15510938449: 如何通过VB编程得到同一个局域网内的其它电脑的MAC地址?? -
林版先辰: Public Declare Function inet_addr Lib "wsock32.dll" (ByVal s As String) As Long Public Declare Function SendARP Lib "iphlpapi.dll" (ByVal DestIP As Long, ByVal SrcIP As Long, pMacAddr As Long, PhyAddrLen As Long) As Long Public ...

东辽县15510938449: VB如何获取局域网内所有计算机的名字 -
林版先辰: 你看看这3个API ,应该对你有帮助.WNetGetConnection VB声明 Declare Function WNetGetConnection Lib "mpr.dll" Alias "WNetGetConnectionA" (ByVal lpszLocalName As String, ByVal lpszRemoteName As String, cbRemoteName As ...

东辽县15510938449: vb中怎样获得局域网中另一台电脑上某个目录下的图片再显示在本地计算机的vb程序的图片按钮中 -
林版先辰: 用webbrowser显示即可就是把web控件网址的指向另一台电脑图片的地址即可

东辽县15510938449: 在局域网环境中,vb 如何获得外网IP地址? -
林版先辰: Private Sub Command1_Click() Dim h As Object, s As String Set h = CreateObject("Microsoft.XMLHTTP") h.Open "GET", "http://www.ip138.com/ip2city.asp", False h.Send If h.ReadyState = 4 Then s = StrConv(h.Responsebody, vbUnicode...

东辽县15510938449: VB 6.0 局域网内数据共享,怎样从其他电脑上直接读取并保存文件? -
林版先辰: 首先将其他电脑上的要读取的文件所在目录映射到本地新磁盘上,然后在VB代码中就可以像操作本地文件一样操作这个新磁盘上的所有文件了.

东辽县15510938449: vb生成的exe文件如何在局域网内共享使用 -
林版先辰: 把exe文件所在的文件夹设为共享目录,并且设为可读可写,局域网内的其他电脑就能访问了.前提是电脑之间要互相可见,最好设为同一个家庭组.

东辽县15510938449: 如何让多台电脑里的vb软件共享一个文件 -
林版先辰: 在局域网中的某台电脑(最好选择性能较好的机子)上建立一个共享文件夹(要把权限设置为所有人都可读可写),然后把文件复制到这个文件夹,只要同一局域网的其他电脑都能够在桌面的“网络”(XP之前的系统是叫“网上邻居”)中看到这...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网