PDA

Vollständige Version anzeigen : Virtuelles Laufwerk erstellen


TommyK
30.01.2007, 11:13
Hallo,

manchmal kann es erforderlich sein das der User unbedingt einen bestimmten Pfad benötigt, dieser aber auf dem System nicht vorhanden ist.

Jetzt könnte man über die Commandozeile und dem DOS-Befehl Subst einen
virtuellen Laufwerksbuchstaben erstellen.
Ab WinNT4 gibt es aber auch eine API-Funktion dafür.

Folgenden Code in ein neues Modul kopieren:
Public Declare Function DefineDosDevice Lib "kernel32.dll" Alias _
"DefineDosDeviceA" (ByVal dwFlags As Long, _
ByVal lpDeviceName As String, _
Optional ByVal lpTargetPath As String = vbNullString) As Long

Public Enum DefintionTyp
Create_LW = &H0
Remove_LW = &H2
End Enum


Public Function Virtuelles_LW(lngLW_Typ As DefintionTyp, sNewLW As String, Optional sTargetPath As String = vbNullString) As Integer
'---------------------------------------------------------------------------------------
' Procedure : Virtuelles_LW
' DateTime : 29.01.2007 15:14
' Author : TommyK
' Purpose :
' Called by :
' Calls :
' Inputs :
' Output :
' Example :
'---------------------------------------------------------------------------------------
Dim iResult As Integer
On Error GoTo Virtuelles_LW_Error

If Right(sTargetPath, 1) <> "\" Then sTargetPath = sTargetPath & "\"
iResult = DefineDosDevice(lngLW_Typ, sNewLW, sTargetPath)
Virtuelles_LW = iResult

On Error GoTo 0
Exit Function

Virtuelles_LW_Error:
Dim strErrString As String
strErrString = "Error Information..." & vbCrLf
strErrString = strErrString & "Error#: " & Err.Number & vbCrLf
strErrString = strErrString & "Description: " & Err.Description
MsgBox strErrString, vbCritical + vbOKOnly, "Error in Function Virtuelles_LW"

End Function

Die Funktion hat 3 Parameter
1. lngLW_Typ
Durch die Enum-Auflistung definiert
Create_LW=LW erstellen
Remove_LW=LW löschen

2. sNewLW
Der LW-Buchstabe der erstellt bzw. gelöscht werden soll

3. sTargetPath
optionaler Parameter
Bei der Erstellung wird der Pfad angegeben der den neuen LW-Buchstaben darstellen soll.
Bei Löschung eines LW bleibt der Parameter leer.

Eine Löschung ist nicht unbedingt erforderlich, da das LW nach einem Neustart
automatisch gelöscht sind.

Die Funktion gibt einen Wert zurück der aussagt ob die Operation gelungen ist oder nicht.

0=LW konnte nicht erstellt werden
1=LW ohne Fehler erstellt

Bsp Aufruf:
Für das Verzeichnis "D:\users\h3wnjtyv\Test" soll das neue LW "G:" erstellt werden.
If Virtuelles_LW(Create_LW, "G:", "D:\users\h3wnjtyv\Test\") = 1 Then
MsgBox "LW wurde erstellt!", vbInformation + vbOKOnly, "Erfolg"
Else
MsgBox "LW konnte nicht erstellt werden!", vbCritical + vbOKOnly, "Fehler!"
End If

Um das LW zu löschen:
If Virtuelles_LW(Remove_LW, "G:") = 1 Then
MsgBox "LW wurde gelöscht!", vbInformation + vbOKOnly, "Erfolg"
Else
MsgBox "LW konnte nicht gelöscht werden!", vbCritical + vbOKOnly, "Fehler!"
End If

Wie das im Explorer aussieht s. Bilder