Public Const MAX_PREFERRED_LENGTH As Long = -1
Public Const NERR_Success As Long = 0&
Public Const ERROR_MORE_DATA = &HEA
Public Const SV_TYPE_WORKSTATION As Long = &H1
Public Const SV_TYPE_SERVER As Long = &H2
Public Const SV_TYPE_SQLSERVER As Long = &H4
Public Const SV_TYPE_DOMAIN_CTRL As Long = &H8
Public Const SV_TYPE_DOMAIN_BAKCTRL As Long = &H10
Public Const SV_TYPE_TIME_SOURCE As Long = &H20
Public Const SV_TYPE_AFP As Long = &H40
Public Const SV_TYPE_NOVELL As Long = &H80
Public Const SV_TYPE_DOMAIN_MEMBER As Long = &H100
Public Const SV_TYPE_PRINTQ_SERVER As Long = &H200
Public Const SV_TYPE_DIALIN_SERVER As Long = &H400
Public Const SV_TYPE_XENIX_SERVER As Long = &H800
Public Const SV_TYPE_SERVER_UNIX As Long = SV_TYPE_XENIX_SERVER
Public Const SV_TYPE_NT As Long = &H1000
Public Const SV_TYPE_WFW As Long = &H2000
Public Const SV_TYPE_SERVER_MFPN As Long = &H4000
Public Const SV_TYPE_SERVER_NT As Long = &H8000
Public Const SV_TYPE_POTENTIAL_BROWSER As Long = &H10000
Public Const SV_TYPE_BACKUP_BROWSER As Long = &H20000
Public Const SV_TYPE_MASTER_BROWSER As Long = &H40000
Public Const SV_TYPE_DOMAIN_MASTER As Long = &H80000
Public Const SV_TYPE_SERVER_OSF As Long = &H100000
Public Const SV_TYPE_SERVER_VMS As Long = &H200000
Public Const SV_TYPE_WINDOWS As Long = &H400000 'Win95 and above
Public Const SV_TYPE_DFS As Long = &H800000 'Root of DFS tree
Public Const SV_TYPE_CLUSTER_NT As Long = &H1000000 'NT Cluster
Public Const SV_TYPE_TERMINALSERVER As Long = &H2000000 'Terminal Server
Public Const SV_TYPE_DCE As Long = &H10000000 'IBM DSS
Public Const SV_TYPE_ALTERNATE_XPORT As Long = &H20000000 'rtn alternate transport
Public Const SV_TYPE_LOCAL_LIST_ONLY As Long = &H40000000 'rtn local only
Public Const SV_TYPE_DOMAIN_ENUM As Long = &H80000000
Public Const SV_TYPE_ALL As Long = &HFFFFFFFF
Public Const SV_PLATFORM_ID_OS2 As Long = 400
Public Const SV_PLATFORM_ID_NT As Long = 500Public Type SERVER_INFO_100
sv100_platform_id As Long
sv100_name As Long
End Type
Public Declare Function NetServerEnum Lib "netapi32" _
(ByVal ServerName As Long, _
ByVal Level As Long, _
buf As Any, _
ByVal PrefMaxLen As Long, _
EntriesRead As Long, _
TotalEntries As Long, _
ByVal ServerType As Long, _
ByVal Domain As Long, _
resume_handle As Long) As Long
Public Declare Function lstrlenW Lib "kernel32" _
(ByVal lpString As Long) As Long
public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (hpvDest As Any, hpvSource As Any, ByVal cbCopy As Long)
Public Declare Function NetAPIBufferFree Lib "NETAPI32.DLL" _
Alias "NetApiBufferFree" (ByVal Buffer As Long) As Long
Public Function GetPointerToByteStringW(ByVal dwData As Long) As String
Dim tmp() As Byte
Dim tmplen As Long
If dwData <> 0 Then
tmplen = lstrlenW(dwData) * 2
If tmplen <> 0 Then
ReDim tmp(0 To (tmplen - 1)) As Byte
CopyMemory tmp(0), ByVal dwData, tmplen
GetPointerToByteStringW = tmp
End If
End If
End FunctionPublic Function GetServers(sType As String) As Long
'lists all servers of the specified type
'that are visible in a domain.
Dim BufPtr As Long
Dim dwEntriesread As Long
Dim dwTotalentries As Long
Dim dwResumehandle As Long
Dim dwServertype As Long
Dim se100 As SERVER_INFO_100
Dim success As Long
Dim nStructSize As Long
Dim cnt As Long
Dim nodx As Node
On Error Resume Next
Select Case sType
' 所有的
Case "All"
dwServertype = SV_TYPE_NT
' 服務器
Case "Server"
dwServertype = SV_TYPE_DOMAIN_CTRL Or SV_TYPE_DOMAIN_BAKCTRL
' Windows 9X
Case "Workstation"
dwServertype = SV_TYPE_SERVER_MFPN
End Select
nStructSize = LenB(se100)
lvwServers.Nodes.Clear
Set nodx = lvwServers.Nodes.Add(, , "Domain", GetDomainName, "Domain", "Domain")
nodx.Bold = True
success = NetServerEnum(0&, _
100, _
BufPtr, _
MAX_PREFERRED_LENGTH, _
dwEntriesread, _
dwTotalentries, _
dwServertype, _
0&, _
dwResumehandle) 'if all goes well
If success = NERR_Success And _
success <> ERROR_MORE_DATA Then
'loop through the returned data, adding each
'machine to the list
For cnt = 0 To dwEntriesread - 1
'get one chunk of data and cast
'into an LOCALGROUP_INFO_1 type
'in order to add the name to a list
CopyMemory se100, ByVal BufPtr + (nStructSize * cnt), nStructSize
Set nodx = lvwServers.Nodes.Add("Domain", tvwChild, , GetPointerToByteStringW(se100.sv100_name), "Server", "Server")
nodx.EnsureVisible
Next
End If
'clean up, regardless of success
Call NetAPIBufferFree(BufPtr)End Function
Public Const NERR_Success As Long = 0&
Public Const ERROR_MORE_DATA = &HEA
Public Const SV_TYPE_WORKSTATION As Long = &H1
Public Const SV_TYPE_SERVER As Long = &H2
Public Const SV_TYPE_SQLSERVER As Long = &H4
Public Const SV_TYPE_DOMAIN_CTRL As Long = &H8
Public Const SV_TYPE_DOMAIN_BAKCTRL As Long = &H10
Public Const SV_TYPE_TIME_SOURCE As Long = &H20
Public Const SV_TYPE_AFP As Long = &H40
Public Const SV_TYPE_NOVELL As Long = &H80
Public Const SV_TYPE_DOMAIN_MEMBER As Long = &H100
Public Const SV_TYPE_PRINTQ_SERVER As Long = &H200
Public Const SV_TYPE_DIALIN_SERVER As Long = &H400
Public Const SV_TYPE_XENIX_SERVER As Long = &H800
Public Const SV_TYPE_SERVER_UNIX As Long = SV_TYPE_XENIX_SERVER
Public Const SV_TYPE_NT As Long = &H1000
Public Const SV_TYPE_WFW As Long = &H2000
Public Const SV_TYPE_SERVER_MFPN As Long = &H4000
Public Const SV_TYPE_SERVER_NT As Long = &H8000
Public Const SV_TYPE_POTENTIAL_BROWSER As Long = &H10000
Public Const SV_TYPE_BACKUP_BROWSER As Long = &H20000
Public Const SV_TYPE_MASTER_BROWSER As Long = &H40000
Public Const SV_TYPE_DOMAIN_MASTER As Long = &H80000
Public Const SV_TYPE_SERVER_OSF As Long = &H100000
Public Const SV_TYPE_SERVER_VMS As Long = &H200000
Public Const SV_TYPE_WINDOWS As Long = &H400000 'Win95 and above
Public Const SV_TYPE_DFS As Long = &H800000 'Root of DFS tree
Public Const SV_TYPE_CLUSTER_NT As Long = &H1000000 'NT Cluster
Public Const SV_TYPE_TERMINALSERVER As Long = &H2000000 'Terminal Server
Public Const SV_TYPE_DCE As Long = &H10000000 'IBM DSS
Public Const SV_TYPE_ALTERNATE_XPORT As Long = &H20000000 'rtn alternate transport
Public Const SV_TYPE_LOCAL_LIST_ONLY As Long = &H40000000 'rtn local only
Public Const SV_TYPE_DOMAIN_ENUM As Long = &H80000000
Public Const SV_TYPE_ALL As Long = &HFFFFFFFF
Public Const SV_PLATFORM_ID_OS2 As Long = 400
Public Const SV_PLATFORM_ID_NT As Long = 500Public Type SERVER_INFO_100
sv100_platform_id As Long
sv100_name As Long
End Type
Public Declare Function NetServerEnum Lib "netapi32" _
(ByVal ServerName As Long, _
ByVal Level As Long, _
buf As Any, _
ByVal PrefMaxLen As Long, _
EntriesRead As Long, _
TotalEntries As Long, _
ByVal ServerType As Long, _
ByVal Domain As Long, _
resume_handle As Long) As Long
Public Declare Function lstrlenW Lib "kernel32" _
(ByVal lpString As Long) As Long
public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (hpvDest As Any, hpvSource As Any, ByVal cbCopy As Long)
Public Declare Function NetAPIBufferFree Lib "NETAPI32.DLL" _
Alias "NetApiBufferFree" (ByVal Buffer As Long) As Long
Public Function GetPointerToByteStringW(ByVal dwData As Long) As String
Dim tmp() As Byte
Dim tmplen As Long
If dwData <> 0 Then
tmplen = lstrlenW(dwData) * 2
If tmplen <> 0 Then
ReDim tmp(0 To (tmplen - 1)) As Byte
CopyMemory tmp(0), ByVal dwData, tmplen
GetPointerToByteStringW = tmp
End If
End If
End FunctionPublic Function GetServers(sType As String) As Long
'lists all servers of the specified type
'that are visible in a domain.
Dim BufPtr As Long
Dim dwEntriesread As Long
Dim dwTotalentries As Long
Dim dwResumehandle As Long
Dim dwServertype As Long
Dim se100 As SERVER_INFO_100
Dim success As Long
Dim nStructSize As Long
Dim cnt As Long
Dim nodx As Node
On Error Resume Next
Select Case sType
' 所有的
Case "All"
dwServertype = SV_TYPE_NT
' 服務器
Case "Server"
dwServertype = SV_TYPE_DOMAIN_CTRL Or SV_TYPE_DOMAIN_BAKCTRL
' Windows 9X
Case "Workstation"
dwServertype = SV_TYPE_SERVER_MFPN
End Select
nStructSize = LenB(se100)
lvwServers.Nodes.Clear
Set nodx = lvwServers.Nodes.Add(, , "Domain", GetDomainName, "Domain", "Domain")
nodx.Bold = True
success = NetServerEnum(0&, _
100, _
BufPtr, _
MAX_PREFERRED_LENGTH, _
dwEntriesread, _
dwTotalentries, _
dwServertype, _
0&, _
dwResumehandle) 'if all goes well
If success = NERR_Success And _
success <> ERROR_MORE_DATA Then
'loop through the returned data, adding each
'machine to the list
For cnt = 0 To dwEntriesread - 1
'get one chunk of data and cast
'into an LOCALGROUP_INFO_1 type
'in order to add the name to a list
CopyMemory se100, ByVal BufPtr + (nStructSize * cnt), nStructSize
Set nodx = lvwServers.Nodes.Add("Domain", tvwChild, , GetPointerToByteStringW(se100.sv100_name), "Server", "Server")
nodx.EnsureVisible
Next
End If
'clean up, regardless of success
Call NetAPIBufferFree(BufPtr)End Function
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货