vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Brandneu! sevEingabe v3.0 - Das Eingabecontrol der Superlative!  
 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: VB4, VB5, VB617.02.03
Serververbindung prüfen - Netzlaufwerk ermitteln

Dieses Beispiel zeigt, wie man prüft, ob zu einer bestimmten Serververbindung bereits ein Netzlaufwerk eingerichtet ist.

Autor:   Dieter OtterBewertung:     [ Jetzt bewerten ]Views:  38.146 
www.tools4vb.deSystem:  Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 Beispielprojekt auf CD 

Folgendes Szenario: Ihr Programm erstellt beim Starten ein Netzlaufwerk für eine bestimmte Serververbindung. Beim Beenden wird das erstellte Netzlaufwerk auch wieder getrennt. Bevor nun aber das neue Netzlaufwerk erstellt wird, möchten Sie prüfen, ob für die Serververbindung nicht evtl. schon ein Netzlaufwerk eingerichtet ist.

Hierzu benötigen wir zunächst alle vorhandenen Netzlaufwerke. Anschließend ermitteln wir die jeweiligen UNC-Pfade und vergleichen diese mit der benötigten Serververbindung. Nur wenn kein entsprechendes Netzlaufwerk existiert, erstellen wir ein neues Netzlaufwerk.

Option Explicit
 
' zunächst die benötigten API-Deklarationen
Private Declare Function GetLogicalDriveStrings Lib "kernel32" _
  Alias "GetLogicalDriveStringsA" ( _
  ByVal nBufferLength As Long, _
  ByVal lpBuffer As String) As Long
 
Private Declare Function GetDriveType Lib "kernel32" _
  Alias "GetDriveTypeA" ( _
  ByVal nDrive As String) As Long
 
Private Declare Function WNetGetConnectionA Lib "mpr.dll" ( _
  ByVal lpszLocalName As String, _
  ByVal lpszRemoteName As String, _
  cbRemoteName As Long) As Long
 
Private Declare Function WNetAddConnection Lib "mpr.dll" _
  Alias "WNetAddConnectionA" ( _
  ByVal lpszNetPath As String, _
  ByVal lpszPassword As String, _
  ByVal lpszLocalName As String) As Long
 
Private Declare Function WNetCancelConnection Lib "mpr.dll" _
  Alias "WNetCancelConnectionA" ( _
  ByVal lpszName As String, _
  ByVal bForce As Long) As Long
 
' Konstanten
Private Const WN_SUCCESS = 0
Private Const DRIVE_REMOTE = 4
' Alle Laufwerke eines bestimmten Typs ermitteln
Private Function GetAllDrives( _
  Optional ByVal DriveType As Long = 0) As String
 
  Dim i As Integer
  Dim Result As Long
  Dim Drives() As String
  Dim Dummy As String
  Dim sDrives As String
 
  Dummy = Space(255)
  Result = GetLogicalDriveStrings(Len(Dummy), Dummy)
 
  Drives = Split(Dummy, Chr$(0))
  For i = 0 To UBound(Drives) - 1
    If GetDriveType(Drives(i)) = DriveType Or _
      DriveType = 0 Then
      sDrives = sDrives & Left$(Drives(i), 1)
    End If
  Next i
  GetAllDrives = sDrives
End Function
' Serververbindung prüfen und ggf.
' Netzlaufwerk verbinden
' 
' Rückgabewert: Netzlaufwerk-Buchstabe
' 
Public Function WNet_DoServerConnection( _
  ByVal sServerPath As String) As String
 
  Dim sDrives As String
  Dim sDrive As String
  Dim i As Integer
  Dim sPath As String
  Dim bExists As Boolean
 
  ' Alle Netzlaufwerke durchlaufen und UNC-Pfad mit
  ' benötigten Netzwerkpfad vergleichen
  sDrives = GetAllDrives(DRIVE_REMOTE)
  For i = 1 To Len(sDrives)
    sDrive = Mid$(sDrives, i, 1) & ":"
 
    ' UNC-Pfad ermitteln
    sPath = Space$(512)
    If WNetGetConnectionA(sDrive, sPath, _
      Len(sPath)) = 0 Then
 
      ' Handelt es sich um den gesuchten Server-Pfad?
      sPath = Left$(sPath, InStr(sPath, vbNullChar) - 1)
      If sPath = sServerPath Then
        bExists = True
        Exit For
      End If
    End If
  Next i
 
  ' Falls noch kein Netzlaufwerk existiert,
  ' jetzt erstellen
  If Not bExists Then
    ' nächsten freien Laufwerksbuchstaben ermitteln
    For i = 67 To 90
      If GetDriveType(Chr$(i) + ":\") = 1 Then
        sDrive = Chr$(i) + ":": Exit For
      End If
    Next i
 
    ' Netzlaufwerk verbinden (ohne Windows-Dialog!)
    If WNetAddConnection(sServerPath, vbNullString, _
      sDrive) <> WN_SUCCESS Then
 
      ' Fehler!
      sDrive = ""
    End If
  End If
 
  ' Rückgabewert: Netzlaufwerk
  WNet_DoServerConnection = sDrive
End Function

Fügen Sie obigen Code am besten in ein Modul ein. Der Aufruf zum Prüfen und Herstellen der Netzverbindung erfolgt dann so:

Dim sRemoteDrive As String
Dim sServerPath As String
 
' Netzwerkpfad
sServerPath = "\\Computer\Ordner"
 
' Netzlaufwerk ermitteln
sRemoteDrive = WNet_DoServerConnection(sServerPath)
If sRemoteDrive = "" Then
  ' Fehler!
  MsgBox "Es trat ein Fehler beim Herstellen der " & _
    "Netzwerkverbindung auf", vbCritical
End If

Dieser Tipp wurde bereits 38.146 mal aufgerufen.

Voriger Tipp   |   Zufälliger Tipp   |   Nächster Tipp

Über diesen Tipp im Forum diskutieren
Haben Sie Fragen oder Anregungen zu diesem Tipp, können Sie gerne mit anderen darüber in unserem Forum diskutieren.

Neue Diskussion eröffnen

nach obenzurück


Anzeige

Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6
(einschl. Beispielprojekt!)

Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
- nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten
- Symbol-Galerie mit mehr als 3.200 Icons im modernen Look
Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m.
 
   

Druckansicht Druckansicht Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel