# Netzwerkinformationen ?



## LoMo (7. Juni 2004)

HI @ all

Ich hab folgendes Problem und zwar möchte ich ein programm in Visual Basic 6.0 schreiben das alle im Netzwerk vorhanden Pc`s auflistet und gewisse Informationen über diese darstellt

Informationen die ich benötige von den PC's im Netzwerk:

Pingzeit der Pc´s
Name der Pc's 
Ip der Pc`s 
Vorhandene Freigaben der Pc`s

evtl. noch Subnetzmaske wobei die meistens eh immer gleich ist

Weiss jemand vielleicht die Befehle um die oben gelisteten Informationen zu erhalten ?

Oder hat oder kennt jemand vielleicht ein gutes tutorial über Netzwerkprogrammierung in Visual Basic

Schonmal danke im vorraus


----------



## Shakie (10. Juni 2004)

Also hier findest du auf alle Fälle mal ein Tutorial zum auflisten aller Netzwerk-PCs. Mehr kann ich leider nicht helfen


----------



## LoMo (18. Juni 2004)

danke das hilft mir schonmal weiter 

vielen dank


----------



## Shakie (8. Oktober 2004)

@LoMo: Das Thema ist ja schon älter, aber mich würde interessieren ob du herausgefunden hast wie man die vorhandenen Freigaben eines PCs ermittelt. Das könnte ich jetzt nämlich auch gut gebrauchen  
@All: oder weiß das sonst noch jemand?


----------



## Filone (9. Oktober 2004)

Shakie, ich bin alles andere als der Netzwerkhecht und weiß nicht, was Freigaben sind. Aber in Sachen Netzwerkprogrammierung habe ich mich mal vor ca. 6 Monaten umgeschaut und dabei ein Klasse Tutorial gefunden, vielleicht hilft Dir das weiter :

Hier ist eine Seite die sich mit Socketprogrammierung befasst.

Das Tutorial TestBench habe ich mir runtergeladen und in Word kopiert, um es anschaulicher zu haben. Es sind rd. 100 Seiten, bei Bedarf kann das Doku ins Netz stellen.


----------



## Shakie (10. Oktober 2004)

Mit Freigaben meine ich die ganz normalen Windows-Freigaben: Wenn jemand im Windows einen Rechtsklick auf einen Ordner macht -->Freigaben und Sicherheit --> "Diesen Ordner freigeben". Wenn man jetzt in der Netzwerkumgebung als Pfad "\\Computername" eingibt erscheint dort der freigegebene Ordner. Mein Ziel ist es eine Liste aller freigegebenen Ordner eines PCs zu bekommen, dessen PC-Name und IP-Adresse ich schon kenne.

@Filone: Auf der Seite gibt es hauptsächlich Tutorials darüber, wie zwei Programme über das Netzwerk miteinander kommunizieren bzw. wie man eine Verbindung zu einem FTP-Server aufbaut. Das ist leider nicht das, was ich suche oder aber ich habe das richtige Tutorial übersehen


----------



## meilon (11. Oktober 2004)

Ich habe auch mal einen Pinger benötigt. Das habe ich verwendet - sehr konfigurierbar!

http://www.activevb.de/tipps/vb6tipps/tipp0329.html

mfg


----------



## Filone (11. Oktober 2004)

Jetzt weiß ich was Du meinst, Shakie.

Die Seite von mir hilft Dir dann herzlich wenig, das stimmt schon. Dort geht es in einem Tut über Socketprogrammierung, die man auch in Netzwerken nutzen kann um mit anderen Netzwerkrechnern kommunizieren zu können, ich dachte das hilft Dir.

Dann habe ich in meiner API-Datenbank mal noch folgendes gefunden :


```
WNetGetConnection
```

und bei der Eingabe in Google bin ich auf folgenden Bericht gestossen :

Netzwerkfreigaben können unter Windows mit virtuellen Laufwerken assoziiert werden, so dass der Zugriff wie bei einem normale Laufwerk erfolgen kann, ohne dass man den Servernamen und Freigabenamen kennen muss. Mit der API Funktion WNetGetConnection kann diese Netzwerkverbindung "enttarnt" werden und der UNC Pfad (Universial Naming Convention) eines Netzlaufwerks ermittelt werden.

Quelle


----------



## Shakie (11. Oktober 2004)

Hmmm, so wie es ausschaut ist das auch nicht das, was mir hilft. Die API-Funktion "WNetGetConnection" gibt nämlich nur einen Netzwerkpfad für Netzwerklaufwerke zurück. Ein Netzwerklaufwerk ist ein Laufwerk, das man zuvor im Windows eingerichtet hat und mit einem Netzwerkpfad verknüpft hat.
Beispiel:
Im Windows ist ein Netzlaufwerk mit dem Buchstaben F: erstellt worden.
Wenn der Benutzer nun im Arbeitsplatz auf F: klickt, dann wird in Wirklichkeit eine Verbindung zu einem Netzwerkpfad hergestellt, zum Beispiel \\Server\Irgendeine_Freigabe
Mit der API-Funktion "WNetGetConnection" kann ich mir also den Netzwerkpfad für das Laufwerk F: ausgeben lassen, was dann eben "\\Server\Irgendeine_Freigabe" ergeben würde.
_Edit:_ siehe hier: http://vb-tec.de/uncpfad.htm

@Oberst Klink: deinen Link werde ich mal ausprobieren, auch wenn ich nicht glaube das es das richtige ist (bei dem Code brauch ich ein bisschen länger um da durchzublicken was eigentlich gemacht wird ;-) )


----------



## Filone (12. Oktober 2004)

Sorry, dann weiß ich auch nicht weiter.


----------



## Shakie (12. Oktober 2004)

Ich habe nach zigtausend Google-Versuchen nun anscheinend die richtige Suchwörterkombination gefunden und bin dabei auf folgenden Link gestoßen: http://www.nickles.de/c/a/archiv2002-190567.htm
Jetzt werde ich das mal ausprobieren! *freu*

_Edit:_ Ui, das funktioniert einwandfrei!


----------



## Filone (12. Oktober 2004)

Dann war "WNet" ja schonmal richtig... *g*


----------



## Dark Ranger (24. September 2005)

Shakie hat gesagt.:
			
		

> Ich habe nach zigtausend Google-Versuchen nun anscheinend die richtige Suchwörterkombination gefunden und bin dabei auf folgenden Link gestoßen: http://www.nickles.de/c/a/archiv2002-190567.htm
> Jetzt werde ich das mal ausprobieren! *freu*
> 
> _Edit:_ Ui, das funktioniert einwandfrei!



Welche Componeten brauche ich alles auf der Form? Irgendwie finde ich im Code nix!


----------



## Shakie (24. September 2005)

Du brauchst für den Code von dem Link gar keine Steuerelemente, nicht mal eine Form. Die gefundenen Netzwerkfreigaben werden im Debug-Fenster der VB-Umgebung ausgegeben.

Was meinst du mit "Irgendwie finde ich im Code nix!"?


----------



## Dark Ranger (24. September 2005)

Achso!
Kannste mir das mal genauer erklären?
Ich hätte es nämlich gerne so, dass die Computer in einer Listbox angezeigt werden und wenn ich einen Computer auswähle, dass dort neben in einer (Textbox?) dann die Freigaben angezeigt werden! Geht das?


----------



## Shakie (24. September 2005)

Klar geht das. Du musst im Code nur das "Debug.Print" durch "Text1.Text =" ersetzen (wenn deine Textbox "Text1" heißt). Dann werden die Netzwerkfreigaben in der Textbox ausgegeben.

Weißt du überhaupt, was das Debug-Fenster ist?


----------



## Dark Ranger (24. September 2005)

Nö! Und das mit dem Text1.Text habe ich auch schon probiert, aber irgendwie geht das nicht!

Wo muss ich den Code überhaupt reinkopieren?


----------



## Shakie (25. September 2005)

Das Debug-Fenster oder auch Direktfenster genannt, kannst du in VB mit Strg+G öffnen.


> ...aber irgendwie geht das nicht!


Wieso geht es nicht? Was passiert?


> Wo muss ich den Code überhaupt reinkopieren?


Bei solchen Fragen wundere ich mich, ob die Leute überhaupt das Programmier-Prinzip von VB verstanden haben. Hast du es verstanden?


----------



## Dark Ranger (26. September 2005)

Du hast mir geschrieben, dass ich debug.print durch Text1.Text ersetzen soll! Und eine Textbox namens Text1 habe ich auch auf eine Form gemacht!



> Du brauchst für den Code von dem Link gar keine Steuerelemente, nicht mal eine Form. Die gefundenen Netzwerkfreigaben werden im Debug-Fenster der VB-Umgebung ausgegeben.


Was brauche ich dann, wenn ich keine Form habe? Ich habe bis jetzt nur mit Formen gearbeitet und solange programmiere ich auch noch nicht mit VB!


----------



## zioProduct (26. September 2005)

Dark Ranger hat gesagt.:
			
		

> Du hast mir geschrieben, dass ich debug.print durch Text1.Text ersetzen soll! Und eine Textbox namens Text1 habe ich auch auf eine Form gemacht!
> 
> 
> Was brauche ich dann, wenn ich keine Form habe? Ich habe bis jetzt nur mit Formen gearbeitet und solange programmiere ich auch noch nicht mit VB!



Damit meint er das was er geschrieben hat: Du brauchst gar nichts. Weil alles was der Code macht(hab ihn nicht angeschaut) Ist, das er dir im DebugFenster anzeigt, welche Freigaben er gefunden hat. Was ist denn daran so schwer zu verstehen? Wenn du nicht weisst was das Debug-Fenster ist, google schnell, und schon kommste auf den Draht, was Shakie damit meint. In c# nennt man das ne normale Consolen-Anwendung (mehr oder weniger). Nicht alles was mit Programmieren zu tun hat braucht ne Form, aber das ist bei VB-verständlicher, wenn mann da nicht ganz Durchblickt. Ist halt schon bischen älter das gute Teil


----------



## Dark Ranger (26. September 2005)

Ok! Kein Problem!
Habe das jetzt in ein Modul geschrieben und dann im Debug Fenster ein paar Sachen getestet!
Aber wie mache ich es jetzt, dass ich eine Form habe und dann alle Computer in einer Liste aufgelistet werden und wenn ich dort draufklicke, dass ich dann die Freigaben sehe!

Habe schon alles möglcihe getestet und mit Text1.Text funktioniert es irgendwie nicht!


----------



## zioProduct (26. September 2005)

Falls es aus dem bestehenden Code nicht geht ( was ich bezweifle) Speichere deine Ergebnisse in eine txt oder xml oder sowas, lade sie anschliessend von dort aus wieder in deine ListBox. Aber ich mach ne Wette das es relativ einfach geht, wenn du im Code ein zwei Veränderungen vornimmst. Ich habe mir den Code nicht angesehen    aber es hat bestimmt ne Methode/Funktion wo er die Pc'Ermittelt, und diese einem Array übergiebt oder sie Direkt auschreibt. Dort ersetzt du die PrintMethode mit einem Array, und falls schon ein Array vorhanden ist, kannste ja einfach den Array inhalt deiner Listbox übergeben. Wie man das macht --> Suche Daten in eine Listbox einlesen.
Hoffe das hilft dir ein wenig weiter.


----------



## Dark Ranger (26. September 2005)

Das habe ich doch schon alles versucht, aber irgendwie wird dann nix in der Listbox (habe es auch schon mit einer Texbox probiert) angezeigt!

Auch wenn ich es über einen Command Button laufen habe nicht!


----------



## Shakie (26. September 2005)

Was meinst du mit "Auch wenn ich es über einen Command Button laufen habe nicht! "? Geht's nun doch oder brauchst du noch Hilfe?


----------



## Dark Ranger (26. September 2005)

Ja das mit dem Debug Fenster geht, aber dass ganze über eine Textbox zu machen geht nicht, dass schaffe ich irgendwie nicht!

Habe schon probiert es mit einem Command Button zu machen, dass wenn man den drückt, der ganze Code durchlaufen wird, aber das funktioniert auch nicht!


----------



## zioProduct (27. September 2005)

Definier doch mal bitte, was nicht geht?
Mach den debugger durch und sag uns doch bitte mal wo er denn hengt, das wär sonderlich einfacher dir dann zu helfen. Momentan weiss ich dases nicht geht, und aufgrund dieser Aussage müsste ich den ganzen Code fumktionsfähig schreiben, damit ich dir helfen kann, aber das ist ja nicht das Ziel. Also bischen mehr Details, danke.


----------



## Dark Ranger (27. September 2005)

Das Problem liegt darin, dass er die ganzen if Schleifen nicht durchläuft, obwohl Computer im Netzwerk vorhanden sind und diese auch Freigaben haben!


----------



## Shakie (27. September 2005)

Du meinst, die IF-Abfrage wird ignoriert? Das kann ja wohl nicht sein. Wie rufst du die Prozedur zum ermitteln der Freigaben denn auf?


----------



## Dark Ranger (27. September 2005)

```
Private Sub cmdSchauen_Click()
'   Speicher reservieren
   Dim txtComputer As String
   Dim Count As Long
   Dim EnumHandle As Long
   Dim NullString As NETRESOURCE
   Dim ReturnValue As Long
   Dim SizeTestR As Long
   Dim StringPtr As String
   Dim TestR(4096) As NETRESOURCE_P
   Dim Zaehler As Long
   Dim MicrosoftRoot As NETRESOURCE
   Dim MachineContainer As NETRESOURCE
   Dim NetResult As Integer
   Dim hEnum As Long
   Dim i As Long
   Dim cbCount As Long
   Dim lString As String
   Dim ParentNodeName As String

   '   Root-Struktur definieren
   NullString.dwDisplayType = 0
   NullString.dwScope = 0
   NullString.dwType = 0
   NullString.dwUsage = 0
   NullString.lpComment = vbNullChar
   NullString.lpLocalName = vbNullChar
   NullString.lpProvider = vbNullChar
   NullString.lpRemoteName = vbNullChar

   '   leere Root-Struktur auf Microsoft übertragen
   MicrosoftRoot = NullString

   '   Wurzel des Netzwerkes finden
   ReturnValue = WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY, RESOURCEUSAGE_CONTAINER, NullString, EnumHandle)

   '   Fehler aufgetreten?
   If (ReturnValue = 0) Then
   '   Nein, Größe des Zwischenspeichers festlegen
      SizeTestR = 4096 * 5

      '   Maximale Anzahl der Resourcen festlegen
      Count = &HFFFFFFFF

      '   Resourcen auslesen
      ReturnValue = WNetEnumResource(EnumHandle, Count, TestR(0), SizeTestR)

      '   Ist ein Fehler aufgetreten?
      If (ReturnValue = 0) Then
         '   Nein, Puffer in lokalen Array aus NETRESOURCE Struktur kopieren und nach "Microsoft" Provider suchen
         For Zaehler = 0 To Count
            '   String an der Adresse auslesen
            StringPtr = Pointer_to_String(TestR(Zaehler).lpRemoteName)

            ' Enthält der Text das Wort "Microsoft"?
            If (UCase(Left(StringPtr, 9)) = "MICROSOFT") Then
               '   Ja, also Informationen in die Root-Struktur kopieren
               MicrosoftRoot.dwDisplayType = TestR(Zaehler).dwDisplayType
               MicrosoftRoot.dwScope = TestR(Zaehler).dwScope
               MicrosoftRoot.dwType = TestR(Zaehler).dwType
               MicrosoftRoot.dwUsage = TestR(Zaehler).dwUsage
               MicrosoftRoot.lpComment = Pointer_to_String(TestR(Zaehler).lpComment)
               MicrosoftRoot.lpLocalName = Pointer_to_String(TestR(Zaehler).lpLocalName)
               MicrosoftRoot.lpProvider = Pointer_to_String(TestR(Zaehler).lpProvider)
               MicrosoftRoot.lpRemoteName = StringPtr
            End If
         Next Zaehler

         '   Resourcen schließen
         WNetCloseEnum EnumHandle

      End If
   End If

   '   Wurde eine Resource benannt?
   If (txtComputer <> vbNullString) Then
      '   Ja, handelt es sich um einen Computer?
      If (Left(txtComputer, 2) = "\\") Then
         '   Ja, also die Freigaben des Netzes ermitteln
         MachineContainer.lpProvider = MicrosoftRoot.lpProvider
         MachineContainer.lpRemoteName = txtComputer

         '   Handle zum Auslesen erstellen
         NetResult = WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY, 0, MachineContainer, hEnum)

         '   Erfolgreich?
         If (NetResult = 0) Then
            '   Wiederholen, bis keine Freigaben mehr vorhanden sind.
            Do While (NetResult <> ERROR_NO_MORE_ITEMS)
               '   Systemevents verarbeiten
               DoEvents

               '   Speicher initialisieren
               Count = &HFFFFFFFF
               SizeTestR = 4096 * 5

               '   Die Freigaben ermitteln
               NetResult = WNetEnumResource(hEnum, Count, TestR(0), SizeTestR)

               '   Ist ein Fehler aufgetreten?
               If ((NetResult <> 0) And (NetResult <> ERROR_NO_MORE_ITEMS)) Then
                  '   Ja, also Schleife verlassen
                  Exit Do
               Else
                  For i = 0 To Count - 1
                     '   Die Daten kopieren
                     lString = Pointer_to_String(TestR(i).lpRemoteName)

                     '   Wurde eine Freigabe ermittelt?
                     If (lString <> vbNullString) Then
                        '   Den Computer wegschneiden
                        lString = Right(lString, Len(lString) - Len(ParentNodeName))

                        '   Freigabe ausgeben
                        txtAusgabe.Text = txtAusgabe.Text & lString & vbTab

                        '   Typ der Freigabe ermitteln
                        If TestR(i).dwType = RESOURCETYPE_DISK Then
                           Debug.Print " ist ein Laufwerk"
                        Else
                           Debug.Print " ist ein Drucker"
                        End If
                     End If
                  Next i
               End If
            Loop
         End If
         '   Aufzählungshandle schließen oder Memory Leak erzeugen
         WNetCloseEnum hEnum
      End If
   End If
End Sub
```

Ich habe den Code so gelassen wie er ist, nur geringfügig verändert, damit er die Sachen in einer Textbox wiedergibt!


----------



## Shakie (27. September 2005)

Ist das der *gesamte Code* von deinem ganzen Projekt?


----------



## Dark Ranger (28. September 2005)

```
Option Explicit
'   Die Netzwerk-Resource im Klartext
Private Type NETRESOURCE
   dwScope As Long
   dwType As Long
   dwDisplayType As Long
   dwUsage As Long
   lpLocalName As String
   lpRemoteName As String
   lpComment As String
   lpProvider As String
End Type

'   Die Netzwerk-Resource, wie die API sie braucht
Private Type NETRESOURCE_P
   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

Private Const RESOURCE_GLOBALNET = &H2
Private Const RESOURCE_CONNECTED = &H1
Private Const RESOURCE_PRIVATENET = &H2
Private Const RESOURCE_REMEMBERED = &H3
Private Const RESOURCEDISPLAYTYPE_DOMAIN = &H1
Private Const RESOURCETYPE_ANY = &H0
Private Const RESOURCETYPE_DISK = &H1
Private Const RESOURCETYPE_PRINT = &H2
Private Const RESOURCETYPE_UNKNOWN = &HFFFF
Private Const RESOURCEUSAGE_CONNECTABLE = &H1
Private Const RESOURCEUSAGE_CONTAINER = &H2
Private Const RESOURCEUSAGE_RESERVED = &H80000000
Private Const ERROR_NO_MORE_ITEMS = 259

Private Declare Function lstrcpy Lib "kernel32" ( _
   ByVal DestinationStr As String, _
   ByVal SourcePtr As Long _
) As Long

Private Declare Function lstrlen Lib "kernel32" ( _
   ByVal SourcePtr As Long _
) As Long

Private Declare Function WNetCloseEnum Lib "mpr.dll" ( _
   ByVal EnumHandle As Long _
) As Long

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

Private Declare Function WNetOpenEnum Lib "mpr.dll" Alias "WNetOpenEnumA" ( _
   ByVal dwScope As Long, _
   ByVal dwType As Long, _
   ByVal dwUsage As Long, _
   lpNetResource As NETRESOURCE, _
   EnumHandle As Long _
) As Long

Private Function Pointer_to_String(Pointer As Long) As String
   '   Speicher reservieren
   Dim Adresse As Long
   Dim Laenge As Long
   Dim Puffer As String

   '   Wenn der Pointer Null ist, dann gibt es einen Fehler
   If (Pointer <> 0) Then
      '   Länge des benötigten Speichers ermitteln
      Laenge = lstrlen(Pointer)

      '   Benötigten Speicher initialisieren
      Puffer = Space(Laenge + 1)

      '   Daten, auf die der Pointer zeigt, in den Speicher kopieren
      Adresse = lstrcpy(Puffer, Pointer)
   Else
      '   Keine daten vorhanden
      Puffer = vbNullString & vbNullChar
   End If

   '   Das abschließende NullChar beseitigen
   Pointer_to_String = Left(Puffer, InStr(Puffer, vbNullChar) - 1)
End Function

Private Sub cmdSchauen_Click()
'   Speicher reservieren
   Dim txtComputer As String
   Dim Count As Long
   Dim EnumHandle As Long
   Dim NullString As NETRESOURCE
   Dim ReturnValue As Long
   Dim SizeTestR As Long
   Dim StringPtr As String
   Dim TestR(4096) As NETRESOURCE_P
   Dim Zaehler As Long
   Dim MicrosoftRoot As NETRESOURCE
   Dim MachineContainer As NETRESOURCE
   Dim NetResult As Integer
   Dim hEnum As Long
   Dim i As Long
   Dim cbCount As Long
   Dim lString As String
   Dim ParentNodeName As String

   '   Root-Struktur definieren
   NullString.dwDisplayType = 0
   NullString.dwScope = 0
   NullString.dwType = 0
   NullString.dwUsage = 0
   NullString.lpComment = vbNullChar
   NullString.lpLocalName = vbNullChar
   NullString.lpProvider = vbNullChar
   NullString.lpRemoteName = vbNullChar

   '   leere Root-Struktur auf Microsoft übertragen
   MicrosoftRoot = NullString

   '   Wurzel des Netzwerkes finden
   ReturnValue = WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY, RESOURCEUSAGE_CONTAINER, NullString, EnumHandle)

   '   Fehler aufgetreten?
   If (ReturnValue = 0) Then
   '   Nein, Größe des Zwischenspeichers festlegen
      SizeTestR = 4096 * 5

      '   Maximale Anzahl der Resourcen festlegen
      Count = &HFFFFFFFF

      '   Resourcen auslesen
      ReturnValue = WNetEnumResource(EnumHandle, Count, TestR(0), SizeTestR)

      '   Ist ein Fehler aufgetreten?
      If (ReturnValue = 0) Then
         '   Nein, Puffer in lokalen Array aus NETRESOURCE Struktur kopieren und nach "Microsoft" Provider suchen
         For Zaehler = 0 To Count
            '   String an der Adresse auslesen
            StringPtr = Pointer_to_String(TestR(Zaehler).lpRemoteName)

            ' Enthält der Text das Wort "Microsoft"?
            If (UCase(Left(StringPtr, 9)) = "MICROSOFT") Then
               '   Ja, also Informationen in die Root-Struktur kopieren
               MicrosoftRoot.dwDisplayType = TestR(Zaehler).dwDisplayType
               MicrosoftRoot.dwScope = TestR(Zaehler).dwScope
               MicrosoftRoot.dwType = TestR(Zaehler).dwType
               MicrosoftRoot.dwUsage = TestR(Zaehler).dwUsage
               MicrosoftRoot.lpComment = Pointer_to_String(TestR(Zaehler).lpComment)
               MicrosoftRoot.lpLocalName = Pointer_to_String(TestR(Zaehler).lpLocalName)
               MicrosoftRoot.lpProvider = Pointer_to_String(TestR(Zaehler).lpProvider)
               MicrosoftRoot.lpRemoteName = StringPtr
            End If
         Next Zaehler

         '   Resourcen schließen
         WNetCloseEnum EnumHandle

      End If
   End If

   '   Wurde eine Resource benannt?
   If (txtComputer <> vbNullString) Then
      '   Ja, handelt es sich um einen Computer?
      If (Left(txtComputer, 2) = "\\") Then
         '   Ja, also die Freigaben des Netzes ermitteln
         MachineContainer.lpProvider = MicrosoftRoot.lpProvider
         MachineContainer.lpRemoteName = txtComputer

         '   Handle zum Auslesen erstellen
         NetResult = WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY, 0, MachineContainer, hEnum)

         '   Erfolgreich?
         If (NetResult = 0) Then
            '   Wiederholen, bis keine Freigaben mehr vorhanden sind.
            Do While (NetResult <> ERROR_NO_MORE_ITEMS)
               '   Systemevents verarbeiten
               DoEvents

               '   Speicher initialisieren
               Count = &HFFFFFFFF
               SizeTestR = 4096 * 5

               '   Die Freigaben ermitteln
               NetResult = WNetEnumResource(hEnum, Count, TestR(0), SizeTestR)

               '   Ist ein Fehler aufgetreten?
               If ((NetResult <> 0) And (NetResult <> ERROR_NO_MORE_ITEMS)) Then
                  '   Ja, also Schleife verlassen
                  Exit Do
               Else
                  For i = 0 To Count - 1
                     '   Die Daten kopieren
                     lString = Pointer_to_String(TestR(i).lpRemoteName)

                     '   Wurde eine Freigabe ermittelt?
                     If (lString <> vbNullString) Then
                        '   Den Computer wegschneiden
                        lString = Right(lString, Len(lString) - Len(ParentNodeName))

                        '   Freigabe ausgeben
                        txtAusgabe.Text = txtAusgabe.Text & lString & vbTab

                        '   Typ der Freigabe ermitteln
                        If TestR(i).dwType = RESOURCETYPE_DISK Then
                           Debug.Print " ist ein Laufwerk"
                        Else
                           Debug.Print " ist ein Drucker"
                        End If
                     End If
                  Next i
               End If
            Loop
         End If
         '   Aufzählungshandle schließen oder Memory Leak erzeugen
         WNetCloseEnum hEnum
      End If
   End If
End Sub
```

Das ist der gesamte Code!


----------

