vb 获取局域网内所有电脑名称及IP地址的代码及详解

wenhu420 2010-09-10 09:49:28
用vb6.0如何获取局域内所以的电脑名称及IP地址的代码及详解.在此感谢!最好是越详细越好.
...全文
949 15 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
wenhu420 2010-09-14
  • 打赏
  • 举报
回复
今天在公司测试了,,还是失败的,不能获得全部局域网,请高手帮我吧,!
lidan198619 2010-09-14
  • 打赏
  • 举报
回复
精辟!!!!
wenhu420 2010-09-13
  • 打赏
  • 举报
回复
以下是我结对上jhone99修改后的代码,不知道是对还是错,我还没有测试,望大家看看,有没有异常和错误
Option Explicit
Private Const resource_connected As Long = &H1&
Private Const resource_globalnet As Long = &H2&
Private Const resource_remembered As Long = &H3&


Private Const resourcedisplaytype_directory& = &H9
Private Const resourcedisplaytype_domain& = &H1
Private Const resourcedisplaytype_file& = &H4
Private Const resourcedisplaytype_generic& = &H0
Private Const resourcedisplaytype_group& = &H5
Private Const resourcedisplaytype_network& = &H6
Private Const resourcedisplaytype_root& = &H7
Private Const resourcedisplaytype_server& = &H2
Private Const resourcedisplaytype_share& = &H3
Private Const resourcedisplaytype_shareadmin& = &H8
Private Const resourcetype_any As Long = &H0&
Private Const resourcetype_disk As Long = &H1&
Private Const resourcetype_print As Long = &H2&
Private Const resourcetype_unknown As Long = &HFFFF&
Private Const resourceusage_all As Long = &H0&
Private Const resourceusage_connectable As Long = &H1&
Private Const resourceusage_container As Long = &H2&
Private Const resourceusage_reserved As Long = &H80000000
Private Const no_error = 0
Private Const error_more_data = 234 'l // dderror
Private Const resource_enum_all As Long = &HFFFF

Private Type Netresource
dwScope As Long
dwType As Long
dwdisplaytype As Long
dwUsage As Long
plocalname As Long
premotename As Long
pcomment As Long
pprovider As Long
End Type

Private Type Netresource_BUf
dwScope As Long
dwType As Long
dwdisplaytype As Long
dwUsage As Long
slocalname As String
sremotename As String
scomment As String
sprovider As String
End Type

Private Declare Function WNetAddConnection Lib "mpr.dll" Alias "WNetAddConnectionA" (ByVal lpszNetPath As String, ByVal lpszPassword As String, ByVal lpszLocalName As String) As Long
Private Declare Function WNetOpenEnum Lib "mpr.dll" Alias "WNetOpenEnumA" (ByVal dwScope As Long, ByVal dwType As Long, ByVal dwUsage As Long, lpNetResource As Netresource, lphEnum As Long) As Long
Private Declare Function WNetEnumResource Lib "mpr.dll" Alias "WNetEnumResourceA" (ByVal hEnum As Long, lpcCount As Long, lpBuffer As Any, lpBufferSize As Long) As Long
Private Declare Function WNetCloseEnum Lib "mpr.dll" (ByVal hEnum As Long) As Long
Private Declare Function ValidateRgn Lib "user32" (ByVal hwnd As Long, ByVal hRgn As Long) As Long
Private Declare Sub copymem Lib "kernel32" Alias "rtlmovememory" (lpto As Any, lpfrom As Any, ByVal llen As Long)
Private Declare Sub copymembyptr Lib "kernel32" Alias "rtlmovememory" (ByVal lpto As Long, ByVal lpfrom As Long, ByVal llen As Long)
Private Declare Function lstrcpy Lib "kernel32" Alias "lstrcpya" (ByVal lpstring1 As String, ByVal lpstring2 As Any) As Long
Private Declare Function lstrlen Lib "kernel32" Alias "lstrlena" (ByVal lpstring As Any) As Long
Private Sub Form_Load()
On Error Resume Next
Const MAX_RESOURCES = 256
Const NOT_A_CONTAINER = -1
Dim bFirstTime As Boolean
Dim lReturn As Long
Dim hEnum As Long
Dim lCount As Long
Dim lMin As Long
Dim lLength As Long
Dim l As Long
Dim lBufferSize As Long
Dim lLastIndex As Long
Dim uNetApi(0 To MAX_RESOURCES) As Netresource
Dim uNet() As Netresource_BUf
bFirstTime = True

Do
If bFirstTime Then
lReturn = WNetOpenEnum(resource_globalnet, resourcetype_any, resourceusage_all, uNetApi(0), hEnum)
bFirstTime = False
Else
If uNet(lLastIndex).dwUsage And resourceusage_container Then
lReturn = WNetOpenEnum(resource_globalnet, resourcetype_any, resourceusage_all, uNetApi(lLastIndex), hEnum)
Else
lReturn = NOT_A_CONTAINER
hEnum = 0
End If
lLastIndex = lLastIndex + 1
End If

If lReturn = no_error Then
lCount = resource_enum_all
Do
lBufferSize = UBound(uNetApi) * Len(uNetApi(0)) / 2
lReturn = WNetEnumResource(hEnum, lCount, uNetApi(0), lBufferSize)
If lCount > 0 Then
ReDim Preserve uNet(0 To lMin + lCount - 1) As Netresource_BUf '以前是netresourece
For l = 0 To lCount - 1
uNet(lMin + l).dwScope = uNetApi(l).dwScope
uNet(lMin + l).dwType = uNetApi(l).dwType
uNet(lMin + l).dwdisplaytype = uNetApi(l).dwdisplaytype
uNet(lMin + l).dwUsage = uNetApi(l).dwUsage
If uNetApi(l).plocalname Then
lLength = lstrlen(uNetApi(l).plocalname)
uNet(lMin + l).slocalname = Space$(lLength)
copymem ByVal uNet(lMin + l).slocalname, ByVal uNetApi(l).plocalname, lLength
End If

If uNetApi(l).premotename Then
lLength = lstrlen(uNetApi(l).premotename)
uNet(lMin + l).sremotename = Space$(lLength)
copymem ByVal uNet(lMin + l).sremotename, ByVal uNetApi(l).premotename, lLength
End If
Next l
End If
lMin = lMin + lCount
Loop While lReturn = error_more_data
End If
If hEnum Then l = WNetCloseEnum(hEnum)
Loop While lLastIndex < lMin
If UBound(uNet) > 0 Then
For l = 0 To UBound(uNet)
If uNet(l).dwdisplaytype = resourcedisplaytype_server Then List1.AddItem uNet(l).sremotename
Next l
End If
End Sub
wenhu420 2010-09-13
  • 打赏
  • 举报
回复
不是吧,,类型错了吧,我查了,好像是类型错啦,我认为不应该是那样定义吧,
getemail 2010-09-13
  • 打赏
  • 举报
回复
放到“通用”里
getemail 2010-09-13
  • 打赏
  • 举报
回复
Private Type NETRESOURCE
dwScope As Long
dwType As Long
dwDisplayType As Long
dwUsage As Long
lpLocalName As String
lpRemoteName As String
lpComment As String
lpProvider As String
End Type


Private Declare Function WNetOpenEnum Lib "mpr.dll" Alias "WNetOpenEnumA" (ByVal dwScope As Long, ByVal dwType As Long, ByVal dwUsage As Long, lpNetResource As NETRESOURCE, lphEnum As Long) As
wenhu420 2010-09-13
  • 打赏
  • 举报
回复
据jhone99提供的代码:WNetOpenEnum(resource_globalnet, resourcetype_any, 0&, ByVal 0&, henum)
提示 byval 0&用户类型不能用,为何?
panyong 2010-09-11
  • 打赏
  • 举报
回复
支持jhone99大哥
fhqainqq 2010-09-11
  • 打赏
  • 举报
回复
用winsok使用的ip地址需要用户事先知道。

我认为用windows api方式可行,去查一下帮助文档吧
贝隆 2010-09-11
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 jhone99 的回复:]
参考

获取局域网计算机名称和IP
[/Quote]
学习了
getemail 2010-09-11
  • 打赏
  • 举报
回复
Ctrl+T 加个Winsock控件
Me.Caption = Winsock1.LocalIP & Winsock1.LocalHostName
wenhu420 2010-09-11
  • 打赏
  • 举报
回复
最好是有注释的..
wenhu420 2010-09-11
  • 打赏
  • 举报
回复
有更详细点的吗??我对api不甚了解..
jhone99 2010-09-10
  • 打赏
  • 举报
回复
wenhu420 2010-09-10
  • 打赏
  • 举报
回复
还有一个小小问题:我举一例子
我已知窗体名为"form1",而想根据窗体名"from1"操作此窗体,该如果把窗体名这个string型转换成可以对象型呢?

1,502

社区成员

发帖
与我相关
我的任务
社区描述
VB 网络编程
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧