Results 1 to 4 of 4

Thread: Network Neighborhood List

  1. #1

    Thread Starter
    Lively Member Nator's Avatar
    Join Date
    Nov 1999
    Location
    East Larryville, GA
    Posts
    80
    Is there a way to get a list of all the computers on a network and put them into a list box?

  2. #2
    Addicted Member S@NSIS's Avatar
    Join Date
    Aug 2000
    Location
    Stoke-On-Trent, England
    Posts
    243
    Hi,
    Try this:

    Open a standard exe and have:
    Form called Form1
    Listbox called List1
    Command button called Command1

    Then add a module and paste the following code:
    Code:
    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&
    
    Public Const RESOURCEUSAGE_ALL As Long = &H0&
    Public Const RESOURCEUSAGE_CONNECTABLE As Long = &H1&
    Public Const RESOURCEUSAGE_CONTAINER As Long = &H2&
    Public Const RESOURCEUSAGE_RESERVED As Long = &H80000000
    
    Public Const NO_ERROR = 0
    Public Const ERROR_MORE_DATA = 234
    Public Const RESOURCE_ENUM_ALL As Long = &HFFFF
    
    Public 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
    
    Public Type NETRESOURCE_REAL
    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
    
    Public Declare Function WNetAddConnection2 Lib "mpr.dll" Alias "WNetAddConnection2A" (lpNetResource As NETRESOURCE, ByVal lpPassword As String, ByVal lpUserName As String, ByVal dwFlags As Long) As Long
    Public Declare Function WNetOpenEnum Lib "mpr.dll" Alias "WNetOpenEnumA" (ByVal dwScope As Long, ByVal dwType As Long, ByVal dwUsage As Long, lpNetResource As Any, lphEnum As Long) As Long
    Public Declare Function WNetEnumResource Lib "mpr.dll" Alias "WNetEnumResourceA" (ByVal hEnum As Long, lpcCount As Long, lpBuffer As NETRESOURCE, lpBufferSize As Long) As Long
    Public Declare Function WNetCloseEnum Lib "mpr.dll" (ByVal hEnum As Long) As Long
    
    Public Declare Function VarPtrAny Lib "vb40032.dll" Alias "VarPtr" (lpObject As Any) As Long
    
    Public Declare Sub CopyMem Lib "kernel32" Alias "RtlMoveMemory" (lpTo As Any, lpFrom As Any, ByVal lLen As Long)
    Public Declare Sub CopyMemByPtr Lib "kernel32" Alias "RtlMoveMemory" (ByVal lpTo As Long, ByVal lpFrom As Long, ByVal lLen As Long)
    
    Public Declare Function lstrcpy Lib "kernel32" Alias "lstrcpyA" (ByVal lpString1 As String, ByVal lpString2 As Any) As Long
    Public Declare Function lstrlen Lib "kernel32" Alias "lstrlenA" (ByVal lpString As Any) As Long
    
    
    
    Public Sub GetNetworkDrives()
    
    
    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_REAL
    Dim CurrentDomain
    bFirstTime = True 'Make code below aware that that it is the first loop
    
    
    
    
    Do
    DoEvents
    If bFirstTime Then 'If this is the first time the loop has executed then
    'Start the enumeration of all network resources
        lReturn = WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_DISK, RESOURCEUSAGE_ALL, ByVal 0&, hEnum) 'Get a handle to a buffer
        'The next time it reaches the if bfirsttime then line it will not be the first time
        bFirstTime = False
    Else
        If uNet(lLastIndex).dwUsage And RESOURCEUSAGE_CONTAINER Then
            lReturn = WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_DISK, RESOURCEUSAGE_ALL, uNet(lLastIndex), hEnum) 'Initiate the enumeration process
        Else
            lReturn = NOT_A_CONTAINER 'Set the returnvalue to NOT_A_CONTAINER for later reference
            hEnum = 0
        End If
        lLastIndex = lLastIndex + 1 'Increase the network resource number by 1 (array number)
    End If
    
    If lReturn = NO_ERROR Then 'If there was no error then procress the data retrieved
        lCount = RESOURCE_ENUM_ALL 'Enumerate all resoureces
        Do
            DoEvents
            lBufferSize = UBound(uNetApi) * Len(uNetApi(0)) / 2 'Set the buffer size
            lReturn = WNetEnumResource(hEnum, lCount, uNetApi(0), lBufferSize) 'Get resource information
            If lCount > 0 Then
                'The next bit copys the information from memory to uNetApi array
                ReDim Preserve uNet(0 To lMin + lCount - 1) As NETRESOURCE_REAL
                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
                    If uNetApi(l).pComment Then
                        lLength = lstrlen(uNetApi(l).pComment)
                        uNet(lMin + l).sComment = Space$(lLength)
                        CopyMem ByVal uNet(lMin + l).sComment, ByVal uNetApi(l).pComment, lLength
                    End If
                    If uNetApi(l).pProvider Then
                        lLength = lstrlen(uNetApi(l).pProvider)
                        uNet(lMin + l).sProvider = Space$(lLength)
                        CopyMem ByVal uNet(lMin + l).sProvider, ByVal uNetApi(l).pProvider, 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)
            DoEvents
            'Select what type of resource it is (there are more but these are the only ones that we want
            Select Case uNet(l).dwDisplayType
                Case RESOURCEDISPLAYTYPE_DOMAIN
                    CurrentDomain = uNet(l).sRemoteName
                Case RESOURCEDISPLAYTYPE_SERVER
    
                    If CurrentDomain <> "" Then
                        Form1.List1.AddItem Mid$(uNet(l).sRemoteName, 3, Len(uNet(l).sRemoteName) - 2)
                    Else
                        Form1.List1.AddItem Mid$(uNet(l).sRemoteName, 3, Len(uNet(l).sRemoteName) - 2)
                    End If
            End Select
        Next l
    End If
    
    End Sub
    then in the forms module put this:
    Code:
    Private Sub Command1_Click()
        GetNetworkDrives
    End Sub
    and your listbox will fill up with all available network drives.

    Hope this helps

    Shaun
    Web/Application Developer
    VB6 Ent (SP5), Win 2000,SQL Server 2000

  3. #3
    Lively Member
    Join Date
    Jan 1999
    Location
    Burlington, IA, USA`
    Posts
    77

    Talking

    ' This will get network name and computer names

    'Paste this into a module

    Option Explicit

    Public Type NETRESOURCE
    dwScope As Long
    dwType As Long
    dwDisplayType As Long
    dwUsage As Long
    lpLocalName As Long
    lpRemoteName As Long
    lpComment As Long
    lpProvider As Long
    End Type

    Public Declare Function WNetOpenEnum Lib "mpr.dll" Alias _
    "WNetOpenEnumA" ( _
    ByVal dwScope As Long, _
    ByVal dwType As Long, _
    ByVal dwUsage As Long, _
    lpNetResource As Any, _
    lphEnum As Long) As Long

    Public Declare Function WNetEnumResource Lib "mpr.dll" Alias _
    "WNetEnumResourceA" ( _
    ByVal hEnum As Long, _
    lpcCount As Long, _
    ByVal lpBuffer As Long, _
    lpBufferSize As Long) As Long

    Public Declare Function WNetCloseEnum Lib "mpr.dll" ( _
    ByVal hEnum As Long) As Long

    'RESOURCE ENUMERATION.
    Public Const RESOURCE_CONNECTED = &H1
    Public Const RESOURCE_GLOBALNET = &H2
    Public Const RESOURCE_REMEMBERED = &H3

    Public Const RESOURCETYPE_ANY = &H0
    Public Const RESOURCETYPE_DISK = &H1
    Public Const RESOURCETYPE_PRINT = &H2
    Public Const RESOURCETYPE_UNKNOWN = &HFFFF

    Public Const RESOURCEUSAGE_CONNECTABLE = &H1
    Public Const RESOURCEUSAGE_CONTAINER = &H2
    Public Const RESOURCEUSAGE_RESERVED = &H80000000

    Private Const GMEM_FIXED = &H0
    Private Const GMEM_ZEROINIT = &H40
    Private Const GPTR = (GMEM_FIXED Or GMEM_ZEROINIT)

    Private Declare Function GlobalAlloc Lib "KERNEL32" (ByVal wFlags As Long, ByVal dwBytes As Long) As Long
    Private Declare Function GlobalFree Lib "KERNEL32" (ByVal hMem As Long) As Long
    Private Declare Sub CopyMemory Lib "KERNEL32" Alias "RtlMoveMemory" (hpvDest As Any, hpvSource As Any, ByVal cbCopy As Long)
    Private Declare Function CopyPointer2String Lib "KERNEL32" Alias "lstrcpyA" (ByVal NewString As String, ByVal OldString As Long) As Long

    Public Sub DoNetEnum()
    Dim hEnum As Long, lpBuff As Long, NR As NETRESOURCE
    Dim cbBuff As Long, cCount As Long
    Dim p As Long, res As Long, i As Long

    'Setup the NETRESOURCE input structure.
    NR.lpRemoteName = 0
    cbBuff = 10000
    cCount = &HFFFFFFFF


    'Open a Net enumeration operation handle: hEnum.
    res = WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY, 0, NR, hEnum)

    If res = 0 Then
    'Create a buffer large enough for the results.
    '10000 bytes should be sufficient.
    lpBuff = GlobalAlloc(GPTR, cbBuff)
    'Call the enumeration function.
    res = WNetEnumResource(hEnum, cCount, lpBuff, cbBuff)
    If res = 0 Then
    p = lpBuff
    'WNetEnumResource fills the buffer with an array of
    'NETRESOURCE structures. Walk through the list and print
    'each local and remote name.
    For i = 1 To cCount
    ' All we get back are the Global Network Containers --- Enumerate each of these
    CopyMemory NR, ByVal p, LenB(NR)
    Form1.Show
    Form1.List1.AddItem "Network Name " & PointerToString(NR.lpRemoteName)

    DoNetEnum2 NR
    p = p + LenB(NR)
    Next i
    End If
    If lpBuff <> 0 Then GlobalFree (lpBuff)
    WNetCloseEnum (hEnum) 'Close the enumeration
    End If
    End Sub

    Private Function PointerToString(p As Long) As String
    'The values returned in the NETRESOURCE structures are pointers to
    'ANSI strings so they need to be converted to Visual Basic Strings.
    Dim s As String
    s = String(255, Chr$(0))
    CopyPointer2String s, p
    PointerToString = Left(s, InStr(s, Chr$(0)) - 1)
    End Function

    Public Sub DoNetEnum2(NR As NETRESOURCE)
    Dim hEnum As Long, lpBuff As Long
    Dim cbBuff As Long, cCount As Long
    Dim p As Long, res As Long, i As Long

    'Setup the NETRESOURCE input structure.
    cbBuff = 10000
    cCount = &HFFFFFFFF

    'Open a Net enumeration operation handle: hEnum.

    res = WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY, 0, NR, hEnum)

    If res = 0 Then
    'Create a buffer large enough for the results.
    '10000 bytes should be sufficient.
    lpBuff = GlobalAlloc(GPTR, cbBuff)
    'Call the enumeration function.
    res = WNetEnumResource(hEnum, cCount, lpBuff, cbBuff)
    If res = 0 Then
    p = lpBuff
    'WNetEnumResource fills the buffer with an array of
    'NETRESOURCE structures. Walk through the list and print
    'each remote name.
    For i = 1 To cCount
    CopyMemory NR, ByVal p, LenB(NR)
    Form1.List1.AddItem "Network Computer #" & i & " " & PointerToString(NR.lpRemoteName)
    p = p + LenB(NR)
    Next i
    End If
    If lpBuff <> 0 Then GlobalFree (lpBuff)
    WNetCloseEnum (hEnum) 'Close the enumeration
    Else
    End If
    End Sub


    'This is for form1 which has a list1

    Private Sub Form_Load()
    DoNetEnum

    End Sub

    An ass may bray a good long time before he shakes the stars down.
    T.S. Elliot

  4. #4

    Thread Starter
    Lively Member Nator's Avatar
    Join Date
    Nov 1999
    Location
    East Larryville, GA
    Posts
    80

    Thanks

    Thanks. Those worked great. I appreciates the help.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  



Click Here to Expand Forum to Full Width