Results 1 to 8 of 8

Thread: computers in a network

  1. #1

    Thread Starter
    The Devil crptcblade's Avatar
    Join Date
    Aug 2000
    Location
    Quetzalshacatenango
    Posts
    9,092
    How do I get a list of the computers on my network? I've looked through some of the other threads, and the suggestions there seem to work fine for WinNT, but I don't even get my computer to show up on WinME. Is there a way to do it with WinME or Win98??

  2. #2

    Thread Starter
    The Devil crptcblade's Avatar
    Join Date
    Aug 2000
    Location
    Quetzalshacatenango
    Posts
    9,092

    Talking not even one?

    is it possible that I have stumped everyone?

  3. #3

    Thread Starter
    The Devil crptcblade's Avatar
    Join Date
    Aug 2000
    Location
    Quetzalshacatenango
    Posts
    9,092

    i hate to push the issue, but...

    I'm trying to make a modified version of WinPopup, with the names of all the computers on the network available, instead of having to know each one. But this information is useless if I can't get it.

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

    Talking Computer Names

    'Here it is AGAIN
    'This will get the network name and all computers booted to the LAN
    '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

  5. #5
    Addicted Member morphman2000's Avatar
    Join Date
    Oct 2000
    Location
    Europe, The Netherlands
    Posts
    254

    Unhappy Gee...

    Is there any simple way??


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

    Talking Simple

    What can be more simple for you, than copy/paste this code?
    An ass may bray a good long time before he shakes the stars down.
    T.S. Elliot

  7. #7
    Guest
    I'm using that code, but I get varying results. What computers on the network does it find? I get unix servers, NT servers/clients, but it doesn't always return computers that I know are on our network. Sometimes it shows my own PC on the list, other times it doesn't.

  8. #8
    Guest
    I think I've found the problem, the buffer size is not large enough. I doubled the buffer size and got twice as many results back.

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