Die Community zu .NET und Classic VB.
Menü

VB 5/6-Tipp 0010: Netzlaufwerk verbinden und trennen

 von 

Beschreibung 

Diese Routine dient dazu Netzlaufwerke einzurichten und wieder zu trennen. Die neu eingerichteten Laufwerke sind über das Herunterfahren des Computers beständig und sollten deshalb bei Bedarf in Unload-Ereignis-Prozedur getrennt werden.

Schwierigkeitsgrad:

Schwierigkeitsgrad 1

Verwendete API-Aufrufe:

WNetAddConnection2A (WNetAddConnection2), WNetCancelConnection2A (WNetCancelConnection2)

Download:

Download des Beispielprojektes [2,48 KB]

'Dieser Quellcode stammt von http://www.activevb.de
'und kann frei verwendet werden. Für eventuelle Schäden
'wird nicht gehaftet.

'Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum.
'Ansonsten viel Spaß und Erfolg mit diesem Source!

'------------- Anfang Projektdatei PROJECT1.VBP -------------
'--------- Anfang Formular "Form1" alias Form1.frm  ---------
' Steuerelement: Festplattenauswahlliste "Drive1"
' Steuerelement: Schaltfläche "Command2"
' Steuerelement: Schaltfläche "Command1"
' Steuerelement: Beschriftungsfeld "Label1"

Option Explicit

'Deklaration: Globale Form API-Konstanten
Private Const RESOURCETYPE_DISK As Long = &H1

'Deklaration: Globale Form API-Typen
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

'Deklaration: Globale Form API-Funktionen
Private 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

Private Declare Function WNetCancelConnection2 Lib "mpr.dll" Alias "WNetCancelConnection2A" ( _
    ByVal lpName As String, ByVal dwFlags As Long, ByVal fForce As Long) As Long

'Deklaration: Globale Form-Variablen
Dim strUserName As String
Dim strUserPassword As String

Dim udtNetzResource As NETRESOURCE

Private Sub Command1_Click()
    'Deklaration: Lokale Prozedur-Variablen
    Dim lngResult As Long

    lngResult = WNetAddConnection2(udtNetzResource, strUserPassword, strUserName, 0)
    If lngResult = 0 Then
        Label1.Caption = "Verbunden."

        Drive1.Drive = udtNetzResource.lpLocalName
        Drive1.Refresh
    Else
        Label1.Caption = "Verbindung nicht möglich."
    End If
End Sub

Private Sub Command2_Click()
    'Deklaration: Lokale Prozedur-Variablen
    Dim lngResult As Long

    lngResult = WNetCancelConnection2(udtNetzResource.lpLocalName, 0, 0)
    If lngResult = 0 Then
        Label1.Caption = "Getrennt"
    Else
        Label1.Caption = "Trennung nicht möglich."
    End If

    Drive1.Refresh
End Sub

Private Sub Form_Load()
    'Control-Eigenschaften initialisieren
    Command1.Caption = "Verbinden"
    Command2.Caption = "Trennen"

    'R1 = Rechnername, C_SYSTEM = Name des zuzuweisenden Laufwerks
    udtNetzResource.lpRemoteName = "\\R1\I_CSS-WORK"

    'z: ist der neue Laufwerksname (gegebenfalls ändern)
    udtNetzResource.lpLocalName = "z:"

    'Username & Passwort (anhängig vom Freigabestatus des Laufwerks). Inhalt ist bestenfalls egal
    strUserName = "Goetz"
    strUserPassword = "holla"

    udtNetzResource.dwType = RESOURCETYPE_DISK
    Label1.Caption = ""
End Sub


'---------- Ende Formular "Form1" alias Form1.frm  ----------
'-------------- Ende Projektdatei PROJECT1.VBP --------------

Tipp-Kompatibilität:

Windows/VB-VersionWin32sWin95Win98WinMEWinNT4Win2000WinXP
VB4
VB5
VB6

Hat dieser Tipp auf Ihrem Betriebsystem und mit Ihrer VB-Version funktioniert?

Ja, funktioniert!

Nein, funktioniert nicht bei mir!

VB-Version:

Windows-Version:

Ihre Meinung  

Falls Sie Fragen zu diesem Artikel haben oder Ihre Erfahrung mit anderen Nutzern austauschen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.

Archivierte Nutzerkommentare 

Klicken Sie diesen Text an, wenn Sie die 28 archivierten Kommentare ansehen möchten.
Diese stammen noch von der Zeit, als es noch keine direkte Forenunterstützung für Fragen und Kommentare zu einzelnen Artikeln gab.
Aus Gründen der Vollständigkeit können Sie sich die ausgeblendeten Kommentare zu diesem Artikel aber gerne weiterhin ansehen.

Kommentar von kicki6 am 05.01.2009 um 10:18

Hallo,

wenn ihr VB.net (ab 2005) verwendet dann müsst Ihr einiges änderen.

Long wird zu Integer.
Deklaration muss auch geändert werden.

mfg
Kicki6

Code:


'Deklaration: Globale Form API-Konstanten
Private Const RESOURCETYPE_DISK As Long = &H1

'Deklaration: Globale Form API-Typen
Public Structure NETRESOURCE
Public dwScope As Integer
Public dwType As Integer
Public dwDisplayType As Integer
Public dwUsage As Integer
Public lpLocalName As String
Public lpRemoteName As String
Public lpComment As String
Public lpProvider As String
End Structure

'Deklaration: Globale Form API-Funktionen
Private Declare Function WNetAddConnection2 Lib "mpr.dll" Alias "WNetAddConnection2A" ( _
ByRef lpNetResource As NETRESOURCE, ByVal lpPassword As String, ByVal lpUserName As String, ByVal dwFlags As Integer) As Integer

Private Declare Function WNetCancelConnection2 Lib "mpr.dll" Alias "WNetCancelConnection2A" ( _
ByVal lpName As String, ByVal dwFlags As Integer, ByVal fForce As Integer) As Integer

Kommentar von Agent J am 23.02.2006 um 10:49

1. Zum Trennen eines Netzlaufwerks ohne Buchstaben muss der Komplette Pfad angegeben werden

Beispiel: Connect "\\Server\Verzeichnis"
Disconnect "\\Server\Verzeichnis"

2. Return-Codes
67 = Benutzername Fehlt
5 = Benutzername und Password Fehlt
1219 = Falscher Benutzername und/oder Password


3. Domäne
Um einen Domänen Benutzernamen anzugeben muss dies wie
folgt geschehen:
Beispiel: Domäne = MeineDomäne.netz
Benutzer = User

Connect "\\Server\Verzeichnis","","MeineDomäne\User"

Es darf nur der Reine Domänenname angegeben sein!
Das Netz darf nicht mit Übergeben werden, wie eine
Normale Anmeldung an der Domäne.

4. Verzeichnisse

Sollte ein Verzeichnis tiefer in einem Verzeichnisbaun
liegen z.b. \\Server\c$\Verzechnis1\Verzeichnis2
so benötigt der User Bereits die Freigabe auf C$
ansonsten kommt es zu Fehlernachrichten 1326, etc.

Am besten Testen mit einem PC der nicht in der Domäne hängt und normalerweise keine Rechte auf das Verzeichnis hat.

Kommentar von marac am 25.04.2005 um 09:52

Verbindungen ohne Benutzername und Passwort haben bei mir auch nicht so recht geklappt, wenn man in diesem Fall aber statt der Funktion "WNetAddConnection2" die Funktion "WNetAddConnection" nutzt, klappt auch das.
Beim Trennen habe ich jetzt grundsätzlich die Funktion "WNetCancelConnection" (ohne "2") genutzt, da Laufwerke, die über "WNetAddConnection" verbunden worden sind mit der Funktion "WNetCancelConnection2" nicht sauber getrennt worden sind...

Kommentar von Welle am 26.10.2003 um 10:44

bei Fehler 2404 muß im Api-Aufruf
"Private Declare Function WNetCancelConnection2 Lib "mpr.dll" Alias "WNetCancelConnection2A" ( _
ByVal lpName As String, ByVal dwFlags As Long, ByVal fForce As Long) As Long"

der Parameter "fForce" auf -1 gesetzt werden.

Das klappt bei mir (Win2000)

Kommentar von Olga Vonbank am 14.05.2003 um 17:04

Hallo,
sollte eigentlich super sein, aber funktioniert nicht ganz (VB6.0, WINXP)- die Verbindung wird hergestellt, aber trennen kann man nicht - Result=2404

kann mir jemand was anderes empfehlen?

Danke
Olga

Kommentar von McChef am 17.02.2003 um 08:48

Das ganze für Window NT4/2000:

Networkpath = "\\Server\Verzeichnis"
NetWorkPassword = "passwort"
localName = "X:"

'Verbinden:
tt = WNetAddConnection(CStr(Networkpath), CStr(NetWorkPassword), CStr(localName))

'Trennen:
tt = NetCancelConnection(CStr(localName), -1)

Der benannte Laufwerksbuchstabe muß noch frei sein!
Das Passwort muß das Passwort eines berechtigten Kontos im Windows-Netzwerk sein. Empfehlung ist das Passwort des Domainenadmins.

Getestet unter Windows NT4/SP6 und Windows2000/SP2.
Sollte auch unter XP funzen.

Kommentar von Ullrich Reich am 30.01.2003 um 09:05

hatte bisher einen rechner der mit w95 lief, da lief dieses Programm ohne Probleme. Nun ist es ein WinNT4 nun funktioniert zwar das trennen, aber das verbinden läuft nicht, er sucht zwar lange, bringt dann aber die Meldung #keine verbindung#. Was ist jetzt falsch daran.

Kommentar von ulrich am 28.11.2002 um 05:27

kommentar zu fehler 67
denke mal das der domain-server das verbinden verhindert, weiterhin
hängt es wohl aucg von den rechten des
users auf der wkst nt ab, ansonsten helfen wohl nur admin-rechte

Kommentar von Schnupfnase am 08.11.2002 um 09:46

Hallo VB's,
Die Funktion läuft mit festen Passwort und Username.
Ich arbeite mit dem Tool auf PC's die Domänen Accounts haben. Da kenne ich nicht die Passwörter der User. Mein Server der das Laufwerk bereitstellt hat die Freigaben mit diesen Accounts aus der Domäne. Wenn ich WNetConn. ohne User und Passwort rufe, erhalte ich einen Fehler. Obwohl das Verbinden mit Hand funktioniert.
Wer kann mir bitte weiterhelfen?
Danke

Kommentar von ProxYa am 27.10.2002 um 13:36

Bei mir finktioniert der Code auch (fast) einwandfrei!
Allerdings muss ich, bevor das ganze funktioniert, immer erst im Explorer die entsprechenden Pfade in der NW-Umgebung öffnen, damit das Programm conected!
(Ich habe eine for-schleife eingebaut, um mehrere LW zu connecten, aber daran dürfte es nicht liegen)
Weiß jemand eine Antwort?
Danke schonmal!

Kommentar von Jochen Claus am 25.09.2002 um 09:18

Hallole, ich bin neu in diesem Forum und versuche TIPP010 auszuprobieren.
Unter Word97/VBA6 habe ich den Code eingefügt und "Form1" generiert. Im Kompilierungslauf erhalte ich die Fehlermeldung, dass die Variable "Drive1" nicht definiert sei. Das ist korrekt, da ich nicht weiß, wie ich "VB.DriveListBox Drive1" definieren soll!?
Kann mir da jemand weiterhelfen?
Danke im Vorraus und Gruß
Jochen

Noch 'ne Frage als newcomer: Im unteren Teil sieht man die Fragen (wahrscheinlich auch gleich meine). Wo stehen die Antworten, um Mehrfachfragen zu vermeiden?

Kommentar von tobias am 06.08.2002 um 10:50

hi
ich möchte eine netzlaufwerk ohne laufwerksbuchstaben verbinden damit ich nur mit dem unc-pfad drauf zugreifen kann. auftraggeber wünscht es so. das verbinden klappt ja nur trennen will er nicht mehr. ich hab einfach lpLocalName = "" gesetzt. so stehts auch in der msdn library. warum trennt der nich???

Kommentar von volker strunk am 02.08.2002 um 14:21

Was mache ich, wenn die angabe von Domäne und Benutzer notwendig ist?
Die Variable UserName nimmt zwar einen Wert wie "meineDomäne.netz\Benutzer" auf, aber danch bekomme ich den Fehler 1202...
Bin leider noch nicht so fit in VB, aber vielleicht hat ja jemand anderes die Lösung.
Danke und Gruß Volker

Kommentar von Marco am 30.07.2002 um 14:37

Ich versuche 2 Recher, die im Netzwerk hängen um über das Netzwerk Dateien von einer Festplatte zur anderen zu kopieren. Mir ist nur das Administratorpasswort und der Username des Administrators bekannt. Das Verzeichnis in das ich verschiedene Dateien kopieren möchte ist vom User nicht freigegeben. Kann ich das Beispiel irgenwie nutzen oder hat jemand eine Idee wie ich dies bewerkstelligen könnte. Gruß Marco

Kommentar von Fabi am 13.05.2002 um 10:08

Leider funktioniert dieser Code bei mir nicht.
Es kommt der Fehler:" Mehrfachdeklaration im aktuellen Gültigkeitsbereich"
Kommt im zusammenhang mit
Dim Result&
Result = WNetAddConnection2(NetzResource, UserPasswort, _
UserName, 0)
Wer kann mir helfen?
Gruss Fabi

Kommentar von Daniel K. am 27.03.2002 um 07:57

Besipiel funktioniert wunderbar unter W2K. Unter NT 4.0 gibt mir "result" allerdings einen Returncode 67 und die verbindung kann nicht hergestellt werden. Jemand eine Idee??

Kommentar von Stephan am 15.03.2002 um 14:46

Hallo zusammen,
ich wahr wohl etwas zu schnell. ich habe die Lösung selber gefunden. Wenn man keine User ID und Passwort mitgeben will , muß man einen vbNullString anstelle der User ID und des Passwortes mitgegeben . Dann funktioniert das auch ohne Probleme.
Stephan

Kommentar von Andreas am 15.03.2002 um 14:24

WIN2K: Wichtiger Hinweis: Netzlaufwerk-Name muss groß geschrieben werden, n: geht nicht, sondern nur N: !!!!!

Kommentar von Stephan am 15.03.2002 um 14:20

Hallo Das Beispiel klappt bei mir gut, allerdings habe ich ein kleines Problem noch. Wenn ich den User und das Passwort auf "" setze kann ich das Laufwerk nicht verbinden. Erstelle ich zwei textboxen und lasse sie leer, dann bekomme ich auch ohne username und passwort eine Verbindung. Gibt es auch einen weg es ohne die Textboxen das sauber zum laufen zu bringen?
Danke Stephan

Kommentar von sven am 06.03.2002 um 19:51

unter win2000 kommt es gleich bei NetzResource.lpRemoteName = Verzeichnis
zu einem connect !
das ist doof !!!

Kommentar von Dieter Scholz am 27.12.2001 um 15:50

Ich möchte eine Netzwerkverbindung (WNetAddConnection) mit einem bestimmten Benutzer z.B Administrator herstellen. Mit dem Beispiel bekomme ich immer einen Fehler. Username und Passwort habe ich schon getauscht. Bitte um Hilfe!

Kommentar von Steffen am 11.07.2001 um 17:16

Hallo VB's,
Die Funktion läuft mit festen Passwort und Username.
Ich arbeite mit dem Tool auf PC's die Domänen Accounts haben. Da kenne ich nicht die Passwörter der User. Mein Server der das Laufwerk bereitstellt hat die Freigaben mit diesen Accounts aus der Domäne. Wenn ich WNetConn. ohne User und Passwort rufe, erhalte ich einen Fehler. Obwohl das Verbinden mit Hand funktioniert.
Wer kann mir bitte weiterhelfen?
Danke Steffen

Kommentar von Olaf am 21.06.2001 um 09:13

Ich bekomme beim Aufruf von WNetAddConnection2 einen Fehler 1326 zurück. Kann mir einer sagen, was das ist?

Kommentar von Steffen am 04.04.2001 um 12:03

Ich möchte ein erstelltes LW bei nächsten Start des BS
automatisch bekommen.
Wie muß dazu die API WNetAddConnection2 gecallt werden damit das BS sich die Verbindung merkt ?
(dwFlags=1 lief nicht)
Danke Steffen

Kommentar von Walter am 19.02.2001 um 17:25

Die o.g. Netzwerkverbindung funktioniert wunderbar, jedoch erscheint im Explorer das Lw: z: auch.
Wie kann ich das unterdrücken?

Kommentar von Benedikt am 19.12.2000 um 21:40

Sehr schönes Beispiel!
Aber geht das auch mit nem Netzwerkdrucker? Die zugehörige Konstante gibt es ja. Aber wie funktioniert die Umsetzung?

Kommentar von Götz Reinecke am 16.11.2000 um 14:43

Tatsächlich!
Habe es jetzt behoben.

Kommentar von Peter am 16.11.2000 um 12:21

Das Beispiel kann nicht funktionieren!
Beim Aufruf Result = WNetAddConnection2(NetzResource, UserName, _
UserPasswort, 0) müssen UserName und UserPasswort getauscht werden!!