vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Blitzschnelles Erstellen von grafischen Diagrammen!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück
Rubrik: HTML/Internet/Netzwerk · Netzwerk   |   VB-Versionen: VB.NET16.06.08
Netzlaufwerk verbinden und trennen

Zwei Funktionen zum Verbinden und Trennen von Netzlaufwerken unter VB.NET

Autor:   Martin SchügerlBewertung:     [ Jetzt bewerten ]Views:  29.312 
ohne HomepageSystem:  Win2k, WinXP, Win7, Win8, Win10, Win11 Beispielprojekt auf CD 

Vor kurzem suchte ich nach einen Quellcode, um Netzlaufwerke unter VB 2005 zu verbinden. Da auch auf dieser Seite nur Tipps mit VB5/6 vorliegen, machte ich mich auf die Suche danach. Im Internet habe ich nun Code dazu gefunden, den ich jetzt hier stark verändert und mit Kommentaren versehen zeigen möchte:

' Benötigte API-Deklarationen
Const RESOURCETYPE_DISK = &H1
 
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
 
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
''' <summary>
''' Netzlaufwerk verbinden
''' </summary>
''' <param name="buchstabe">Laufwerksbuchstabe</param>
''' <param name="freigabename">Freigabename</param>
Public Function MapDrive(ByVal buchstabe As String, _
  ByVal freigabename As String) As Boolean
 
  Dim nr As NETRESOURCE    ' Netzlaufwerk-Objekt (siehe Struktur)
  Dim username As String   ' Username für die Netzwerkresource
  Dim password As String   ' Passwort für die Netzwerkresource
  Dim cntresult As Integer ' Resultat des Verbindens
 
  ' nr ist das neue Netzlaufwerk der NETRESOURCE Struktur:
  nr = New NETRESOURCE
 
  ' Überprüfen, ob der Laufwerkbuchstabe schon vorhanden ist,
  ' wenn ja dann Funktionen beenden.
  If Not buchstabe.EndsWith(":") Then buchstabe = buchstabe & ":"
  Dim sDrives As String = Join(System.IO.Directory.GetLogicalDrives(), "")
  If sDrives.Contains(buchstabe) Then Return False
 
  ' Dem Objekt nr übergeben wir jetzt die wichtigen Eigenschaften:
  With nr
    ' Freigabename setzt sich zusammen aus dem 
    ' Computernamen und dem Freigabename
    ' Bsp: \\meincomputer\freigabe1
    .lpRemoteName = freigabename
    ' Der gewünschte Laufwerksbuchstabe
    .lpLocalName = buchstabe
  End With
 
  ' Evtl. Username und Passwort, sollte die Freigabe gesichert sein.
  username = Nothing
  password = Nothing
 
  ' Typdefinition des Netzlaufwerk (eben Laufwerk)
  nr.dwType = RESOURCETYPE_DISK
 
  ' Die eigentliche Funktion, das Verbinden. 
  ' Das Ergebnis wird in cntresult abgespeichert.
  ' Bei Erfolg kommt als Return 0
  cntresult = WNetAddConnection2(nr, password, username, 0)
  If cntresult = 0 Then
    ' Wenn null, war das Verbinden erfolgreich,
    Return True
  Else
    ' anderfalls nicht.
    Return False
  End If
End Function
''' <summary>
''' Netzlaufwerk trennen
''' </summary>
''' <param name="buchstabe">Netzlaufwerksbuchstabe</param>
Public Function UnMapDrive(ByVal buchstabe As String, _
  Optional ByVal ForceDisconnect As Boolean = True) As Boolean
  Dim unctrc As Integer ' Result des Trennes
 
  ' Die eigentliche Funktion des Netzlaufwerks trennen.
  If Not buchstabe.EndsWith(":") Then buchstabe = buchstabe & ":"
  unctrc = WNetCancelConnection2(buchstabe, 0, ForceDisconnect)
  If unctrc = 0 Then
    ' Wenn null, war die Funktion erfolgreich
    Return True
  Else
    ' Andernfalls war die Funktion nicht erfolgreich.
    Return False
  End If
End Function

Beispiel für den Aufruf:

' Netzlaufwerk verbinden
Dim sDrive As String = "O:"
If MapDrive(sDrive, "\\Rechnername\Freigabe") = True Then
  MsgBox("Laufwerk verbunden (" & sDrive & ")")
End If
' Laufwerk trennen
If RemoveNetworkDrive(sDrive, True) = True Then
  MsgBox("Laufwerk " & sDrive & " wurde erfolgreich getrennt")
End If