vb 搜索局域网计算机,vb 获取局域网内所有电脑名称及IP地址的代码及详解

#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 

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值