Mit den unter Verzeichnisauswahl genannten APIs lässt sich der Name eines ausgewählten Verzeichnisses ermitteln und weiterverwenden.
Bei Netzwerkverzeichnissen, die einem Laufwerkbuchstaben zugewiesen wurden, wird dabei auch der verwendete Laufwerksbuchstabe zurückgegeben.
Zur Umwandlung des Laufwerksbuchstabes in den UNC-Pfad stehen weitere APIs zur Verfügung. Diese durchlaufen alle Netzressourcen und ermitteln den zugehörigen Netwerkpfad.
Der ausgewählte Verzeichnisname wird zur Ermittlung des UNC-Pfades an die Funktion LetterToUNC() weitergereich, in der Netzwerkpfad ermittelt wird.
Vorher muss der Verzeichnisname noch vom Laufwerksbuchstaben abgetrennt werden, da die Funktion nur diesen Buchstaben als Parameter erwartet.
Der Aufruf kann folgendermaîen aussehen:
Wird direkt ein Netzwerkverzeichnis ausgewählt, muss dies vorher geprüft werden, da z.B. Windows 2000 ansonsten den Pfad aus dem Ordner Netzwerkumgebung zurückliefert.
Function LetterToUNC(DriveLetter As String) As String
Dim hEnum As Long
Dim NetInfo(1023) As NETRESOURCE
Dim entries As Long
Dim nStatus As Long
Dim LocalName As String
Dim UNCName As String
Dim i As Long
Dim r As Long
' Begin the enumeration
nStatus = WNetOpenEnum(RESOURCE_CONNECTED, RESOURCETYPE_ANY, _
0&, ByVal 0&, hEnum)
LetterToUNC = DriveLetter
'Check for success from open enum
If ((nStatus = 0) And (hEnum <> 0)) Then
' Set number of entries
entries = 1024
' Enumerate the resource
nStatus = WNetEnumResource(hEnum, entries, NetInfo(0), _
CLng(Len(NetInfo(0))) * 1024)
' Check for success
If nStatus = 0 Then
For i = 0 To entries - 1
' Get the local name
LocalName = ""
If NetInfo(i).lpLocalName <> 0 Then
LocalName = Space(lstrlen(NetInfo(i).lpLocalName) + 1)
r = lstrcpy(LocalName, NetInfo(i).lpLocalName)
End If
' Strip null character from end
If Len(LocalName) <> 0 Then
LocalName = Left(LocalName, (Len(LocalName) - 1))
End If
If UCase$(LocalName) = UCase$(DriveLetter) Then
' Get the remote name
UNCName = ""
If NetInfo(i).lpRemoteName <> 0 Then
UNCName = Space(lstrlen(NetInfo(i).lpRemoteName) + 1)
r = lstrcpy(UNCName, NetInfo(i).lpRemoteName)
End If
' Strip null character from end
If Len(UNCName) <> 0 Then
UNCName = Left(UNCName, (Len(UNCName) - 1))
End If
' Return the UNC path to drive
'added the [] to seperate on printout only
LetterToUNC = UNCName
' Exit the loop
Exit For
End If
Next i
End If
End If
' End enumeration
nStatus = WNetCloseEnum(hEnum)
End Function
|