Alle Netzwerkbenutzer auslesen

  • VB6

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von Mufasa.

    Alle Netzwerkbenutzer auslesen

    Hi Leute,

    ich möchte einen Dateimanager mit zusätzlichen funktionen schreiben. Unter anderem eben eine Art Netzwerkumgebung. Aber wie kann ich alle am Netzwerkteilnehmenden Computer auflisten lassen???

    Bitte um HILFE

    KKK
    Ich glaub das geht mit VB nich weil man dafür NetGetQueryInformation aufrufen muss und dann von dieser Funktion in einen Buffer den Zeiger auf eine Struktur zugewiesen bekommt und das kannst du in VB nich lösen (glaub ich, kann sein das ich mich irre !)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Unknown“ ()

    Doch klar geht das, und zwar so:

    Visual Basic-Quellcode

    1. Private Declare Function WNetOpenEnum Lib "mpr.dll" Alias _
    2. "WNetOpenEnumA" (ByVal dwScope As Long, ByVal dwType As _
    3. Long, ByVal dwUsage As Long, lpNetResource As Any, lphEnum _
    4. As Long) As Long
    5. Private Declare Function WNetEnumResource Lib "mpr.dll" Alias _
    6. "WNetEnumResourceA" (ByVal hEnum As Long, lpcCount As Long, _
    7. lpBuffer As NETRESOURCE, lpBufferSize As Long) As Long
    8. Private Declare Function WNetCloseEnum Lib "mpr.dll" (ByVal hEnum _
    9. As Long) As Long
    10. Private Declare Function lstrlen Lib "kernel32" Alias "lstrlenA" _
    11. (ByVal lpString As Any) As Long
    12. Private Type NETRESOURCE
    13. dwScope As Long
    14. dwType As Long
    15. dwDisplayType As Long
    16. dwUsage As Long
    17. pLocalName As Long
    18. pRemoteName As Long
    19. pComment As Long
    20. pProvider As Long
    21. End Type
    22. Private Type NETRESOURCE_REAL
    23. dwScope As Long
    24. dwType As Long
    25. dwDisplayType As Long
    26. dwUsage As Long
    27. sLocalName As String
    28. sRemoteName As String
    29. sComment As String
    30. sProvider As String
    31. End Type
    32. Private Const RESOURCE_GLOBALNET As Long = &H2&
    33. Private Const RESDTYPE_SERVER& = &H2
    34. Private Const RESOURCETYPE_ANY As Long = &H0&
    35. Private Const RESOURCEUSAGE_ALL As Long = &H0&
    36. Private Const RESOURCEUSAGE_CONTAINER As Long = &H2&
    37. Private Const NO_ERROR = 0
    38. Private Const ERROR_MORE_DATA = 234
    39. Private Const RESOURCE_ENUM_ALL As Long = &HFFFF
    40. Public Sub GetLanIPs()
    41. Const MAX_RESOURCES = 256
    42. Const NOT_A_CONTAINER = -1
    43. Dim bFirstTime As Boolean
    44. Dim lRet&, hEnum&, lCnt&, lMin&, lLen&, l&, lBufSize&, lLastIx&
    45. Dim nRem$, F$
    46. Dim uNetApi(0 To MAX_RESOURCES) As NETRESOURCE
    47. Dim uNet() As NETRESOURCE_REAL
    48. Dim MaxUBound As Long
    49. bFirstTime = True
    50. Do
    51. If bFirstTime Then
    52. lRet = WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY, RESOURCEUSAGE_ALL, ByVal 0&, hEnum)
    53. bFirstTime = False
    54. Else
    55. If uNet(lLastIx).dwUsage And RESOURCEUSAGE_CONTAINER Then
    56. lRet = WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY, RESOURCEUSAGE_ALL, uNet(lLastIx), hEnum)
    57. Else
    58. lRet = NOT_A_CONTAINER
    59. hEnum = 0
    60. End If
    61. lLastIx = lLastIx + 1
    62. End If
    63. If lRet = NO_ERROR Then
    64. lCnt = RESOURCE_ENUM_ALL
    65. Do
    66. lBufSize = UBound(uNetApi) * Len(uNetApi(0)) / 2
    67. lRet = WNetEnumResource(hEnum, lCnt, uNetApi(0), lBufSize)
    68. If lCnt > 0 Then
    69. ReDim Preserve uNet(0 To lMin + lCnt - 1) As NETRESOURCE_REAL
    70. For l = 0 To lCnt - 1
    71. uNet(lMin + l).dwScope = uNetApi(l).dwScope
    72. uNet(lMin + l).dwType = uNetApi(l).dwType
    73. uNet(lMin + l).dwDisplayType = uNetApi(l).dwDisplayType
    74. uNet(lMin + l).dwUsage = uNetApi(l).dwUsage
    75. If uNetApi(l).pLocalName Then
    76. lLen = lstrlen(uNetApi(l).pLocalName)
    77. uNet(lMin + l).sLocalName = Space$(lLen)
    78. CopyMemory ByVal uNet(lMin + l).sLocalName, ByVal uNetApi(l).pLocalName, lLen
    79. End If
    80. If uNetApi(l).pRemoteName Then
    81. lLen = lstrlen(uNetApi(l).pRemoteName)
    82. uNet(lMin + l).sRemoteName = Space$(lLen)
    83. CopyMemory ByVal uNet(lMin + l).sRemoteName, ByVal uNetApi(l).pRemoteName, lLen
    84. End If
    85. If uNetApi(l).pComment Then
    86. lLen = lstrlen(uNetApi(l).pComment)
    87. uNet(lMin + l).sComment = Space$(lLen)
    88. CopyMemory ByVal uNet(lMin + l).sComment, ByVal uNetApi(l).pComment, lLen
    89. End If
    90. If uNetApi(l).pProvider Then
    91. lLen = lstrlen(uNetApi(l).pProvider)
    92. uNet(lMin + l).sProvider = Space$(lLen)
    93. CopyMemory ByVal uNet(lMin + l).sProvider, ByVal uNetApi(l).pProvider, lLen
    94. End If
    95. Next l
    96. End If
    97. lMin = lMin + lCnt
    98. Loop While lRet = ERROR_MORE_DATA
    99. End If
    100. If hEnum Then l = WNetCloseEnum(hEnum)
    101. Loop While lLastIx < lMin
    102. On Error Resume Next
    103. MaxUBound = UBound(uNet)
    104. If Err.Number = 0 Then
    105. For l = 0 To UBound(uNet)
    106. If uNet(l).dwDisplayType = RESDTYPE_SERVER Then
    107. F = uNet(l).sRemoteName
    108. F = Replace$(F, "\", vbNullString)
    109. F = Replace$(F, "/", vbNullString)
    110. F = LCase(F)
    111. If F vbNullString Then
    112. List1.Add F
    113. End If
    114. End If
    115. Next l
    116. End If
    117. On Error GoTo 0
    118. End Sub
    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Agent“ ()

    Ich habe vergessen, die CopyMemory API zu deklarieren:

    Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (ByRef Destination As Any, ByRef Source As Any, ByVal Length As Long)
    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum
    Den oberen Teil (bis zum Strich) schreibst du in ein Modul, die GetLanIPs-Prozedur in ein Formular. Dann machst du im Formular einen Button und eine ListBox (List1) und benutzt folgenden Code:

    Private Sub Command1_Click()
    GetLanIPs
    End Sub
    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum

    Thema Wiederbelebung :-)

    Jetzt muss ich das Thema mal wiederbeleben.... sitze nämlich jetzt gerade vor dem gleichen bzw. einem ähnlichen Problem....

    Vorneweg: Ich bin absoluter Neuling und habe noch nie VB geschrieben :( Also bitte gaaaaanz laaaangsam für Dummies ;)

    Ich soll also für die Arbeit ein Progrämmchen machen, dass alle Netzwerk-UP&P-Geräte mit IP anzeigt. Ideal wäre es wenn man auf jedes Gerät Doppelklicken kann und sich diese IP dann im Standardbrowser öffnet. Aber das wäre dann der zweite Schritt....

    @Marcus: Komm ich hier mit Deinem Code hier zum Ziel? Wenn ja wie mach ich das damit? Habe wirklich null Ahnung bisher.... Könntest Du das vielleicht als kleines Projekt hochladen? Wäre super!!

    @All: Oder gibt es hier oder irgendwo sonst schon einen halbwegs fertigen Code für sowas den ich anpassen könnte an die Bedürfnisse? Ich meine jetzt Farbgebung und so....

    Hmmm.....schließlich fängt ja jeder mal klein an ;)

    Danke allen schon mal im Vorraus!!