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