Rubrik: HTML/Internet/Netzwerk · Netzwerk | VB-Versionen: VB.NET | 16.06.08 |
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