VB 5/6-Tipp 0500: Virtuelle Laufwerke erstellen
von Hans-Jörg Stradtmann
Beschreibung
Dieser Tipp zeigt wie man virtuelle Laufwerke erstellt, die dann auf einen Ordner verweisen. Dies wird mit dem Programm "subst" realisiert.
Ergänzung am 13.11.2002:
Jetzt können auch Windowsordner, die ein Leerzeichen oder ähnliches enthalten, verwendet werden!
Ergäntung 27.12.2002:
Nun funktioniert der Tipp auch fehlerfrei, wenn es sich nicht um Laufwerk C handelt
Schwierigkeitsgrad: | Verwendete API-Aufrufe: | Download: |
'Dieser Quellcode stammt von http://www.activevb.de 'und kann frei verwendet werden. Für eventuelle Schäden 'wird nicht gehaftet. 'Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum. 'Ansonsten viel Spaß und Erfolg mit diesem Source! '--------------- Anfang Projektdatei subs.vbp --------------- '---------- Anfang Formular "Form1" alias subs.frm ---------- ' Steuerelement: Schaltfläche "Command2" ' Steuerelement: Festplattenauswahlliste "Drive1" ' Steuerelement: Schaltfläche "Command1" ' Steuerelement: Verzeichnisauswahlliste "Dir1" ' Steuerelement: Listen-Steuerelement "List2" ' Steuerelement: Listen-Steuerelement "List1" ' Steuerelement: Beschriftungsfeld "Label2" ' Steuerelement: Beschriftungsfeld "Label1" Option Explicit 'Hinweis: 'Unter WindowsNT und den daruaf aufbauenden Betriebssystemen gibt es auch eine 'API-Funktion, die genau das erledigen soll ' 'Private Declare Function DefineDosDevice Lib "kernel32.dll" Alias _ ' "DefineDosDeviceA" (ByVal dwFlags As Long, _ ' ByVal lpDeviceName As String, _ ' Optional ByVal lpTargetPath As String = vbNullString) As Long ' 'Private Const DDD_CREATE_DEFINITION As Long = &H0 ' LW-Zuordnung 'Private Const DDD_REMOVE_DEFINITION As Long = &H2 ' LW-Zuordnung wieder aufheben Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliSeconds As Long) 'Ergänzung am 13.11.2002 zum Verwenden von Ordnern, die ein Space im Namen haben etc. Private Declare Function GetShortPathName Lib "kernel32" _ Alias "GetShortPathNameA" ( _ ByVal lpszLongPath As String, _ ByVal lpszShortPath As String, _ ByVal cchBuffer As Long) As Long Dim strShell, strPath, sbstfn(25) As String Dim sbstf, l1, l2 As Long Private Sub Command1_Click() 'Virtl. Laufwerk erstellen 'Ergänzung am 13.11.2002 Dim strDosPath As String Dim Result As Long strDosPath = Space(255) Result = GetShortPathName(strPath, strDosPath, Len(strDosPath)) strDosPath = Mid$(strDosPath, 1, Result) strShell = "subst " & List1.List(l1) & " " & strDosPath 'Ergänzung ende List2.AddItem List1.List(l1) List1.RemoveItem (l1) sbstf = sbstf + 1 sbstfn(sbstf) = strPath Shell strShell Command2.Enabled = True End Sub Private Sub Command2_Click() 'Virtl. Laufwerk löschen Dim i As Long If sbstf > -1 Then strShell = "subst " & List2.List(l2) & " /D" List1.AddItem List2.List(l2) List2.RemoveItem (l2) Shell strShell For i = l2 + 1 To sbstf sbstfn(i - 1) = sbstfn(i) Next i sbstf = sbstf - 1 End If If sbstf = -1 Then Command2.Enabled = False End Sub Private Sub Dir1_Change() strPath = Dir1.Path End Sub Private Sub Drive1_Change() Dir1.Path = Drive1.Drive End Sub Private Sub Form_Load() Dim i As Long Dim ff As Long ff = FreeFile Command2.Enabled = False sbstf = -1 strShell = App.Path & "\subs.bat" Open strShell For Output As #ff Print #ff, "subst > subst.txt" Close #ff Sleep (100) Shell strShell Sleep (100) Form1.Show If Len(Dir(CurDir$ & "\subst.txt")) > 0 Then Open CurDir$ & "\subst.txt" For Input As #ff While Not EOF(ff) Line Input #ff, strShell List2.AddItem (Left$(strShell, 2)) sbstf = sbstf + 1 sbstfn(sbstf) = Right$(strShell, Len(strShell) - 6) Wend Command2.Enabled = True Close #ff Sleep 100 Kill (CurDir$ & "\subst.txt") End If For i = 65 To 90 List1.AddItem Chr$(i) & ":" Next i Call Dir1_Change End Sub Private Sub List1_Click() If List1.ListIndex <> -1 Then l1 = List1.ListIndex End If End Sub Private Sub List2_Click() If List2.ListIndex <> -1 Then l2 = List2.ListIndex Dir1.Path = sbstfn(l2) End If End Sub '----------- Ende Formular "Form1" alias subs.frm ----------- '---------------- Ende Projektdatei subs.vbp ----------------
Tipp-Kompatibilität:
Windows/VB-Version | Win32s | Win95 | Win98 | WinME | WinNT4 | Win2000 | WinXP |
VB4 | |||||||
VB5 | |||||||
VB6 |
Ihre Meinung
Falls Sie Fragen zu diesem Artikel haben oder Ihre Erfahrung mit anderen Nutzern austauschen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.
Archivierte Nutzerkommentare
Klicken Sie diesen Text an, wenn Sie die 12 archivierten Kommentare ansehen möchten.
Diese stammen noch von der Zeit, als es noch keine direkte Forenunterstützung für Fragen und Kommentare zu einzelnen Artikeln gab.
Aus Gründen der Vollständigkeit können Sie sich die ausgeblendeten Kommentare zu diesem Artikel aber gerne weiterhin ansehen.
Kommentar von Mishka am 12.07.2008 um 21:24
Hallo,
kann man dem neu-erstellten virtuellen Datenträger auch einen Namen geben ?
Danke,
Mishka
Kommentar von MD am 20.11.2006 um 17:04
Dieses Thema ist zwar schon etwas älter, aber vielleicht findet sich doch noch jemand, der folgendes realisieren kann...
Unter XP (XP Pro SP2) sollte ein virtuelles LW mit der subst.exe angelegt werden... bis hierhin ist es wohl kein Problem...
ABER ich möchte danach dem "neuen Virtuelle LW", meinetwegen auch dem Link umbenennen können.
Wenn Xp es als LW erkennt, sollte es möglich sein, dieses auch umzubenennen.
Wenn es als Link (e.g. Shortcut) erkannt wird, sollte dies also auch möglich sein.
Das wäre doch eine Herausforderung, oder...?
gruss
MD
Kommentar von Agent J am 20.02.2006 um 13:55
@Kevin
mit diesem Code kannst du Virtuelle Laufwerke hinzufügen und Löschen.
'Mountet einen Pfad auf einen LW Buchstaben
Sub MountVirtualDrive(strVirtualDrive, strPhysicPath)
Shell "subst.exe " & strVirtualDrive & Chr(32) & strPhysicPath, vbHide
End Sub
'UnMountet einen Pfad von einem LW Buchstaben
Sub UnMountVirtualDrive(strVirtualDrive)
Shell "subst.exe " & strVirtualDrive & " /d", vbHide
End Sub
Kommentar von Kevin am 24.01.2006 um 20:45
Danke ich habe jetzt eine Virtuelle Festplatte und kann sie nicht Löschne !!!!!!!!!!!!!!!!!!!!
Kommentar von Daniel am 12.10.2003 um 19:09
wozu soll ich eine label1 und label2 in meine form machen?! die sind im code gar nicht erwähnt. also brauch ich die auch nicht in der controls-liste...
Kommentar von Mgalpha am 20.06.2003 um 02:44
also jetzt geb ich hier mal was zum besten !
dieses Programm steuert lediglich ein Dos Tool namens
subst !
subst erstellt virtuelle laufwerke !
aber keine cdroms !
daher kann auch ein Programm das ein CD-Rom oder DVD-Rom
benötigt !
dieses Laufwerk nicht erkennen !
Ps.:
Es nutzt ncihts den Sorce zu endern !
ihr müßtet schon die Datei Subst.exe ändern !
besser ist es sich einfach ein Programm zubeschaffen das es zuläst ein Lauferkstyp frei zuwählen und mit einem Verzeichnis zu verknüpfen !
mfg mg !
Kommentar von Marc am 16.03.2003 um 10:36
DIESE LAUFWERKE SIND JA AUCH KEINE VIRTUELLEN CD-LAUFWERKE, SONDERN NUR EIN LINK AUF EIN VERZEICHNIS.UND DAS WEIß WINDOWS AUCH (DAS DAS NUR EIN LINK IST).SEHEN KANN MAN DAS AUCH, WEIL DAS EIN GANZ ANDERES SYMBOL IST.
Kommentar von Arne Hinrichs am 23.02.2003 um 16:05
Um den Vorschlag umzusetzen bin ich viel zu sehr Amateurliga. Ich habe aber ein Problem, vielleicht könnt Ihr mir helfen? Ich habe auf meinem PC (mit Windows ME) vier Laufwerke vermutlich aus alten zeiten mit irgendeinem Programm zur Einrichtung Viruteller Laufwerke. Die Beeichnung im Windows Systemmanager: V386 STEALTH DVD. Neue Programme wie DEAMON oder VIRTUAL CD V 4.5 erkennen diese virtuellen laufwerke nicht als die ihren und können sie auch nicht bearbeiten. Mit Windows-System (Gerätemanager) krieg ich die Dinger ums Verrecken jedoch auch nicht raus. Ich kann zwar die Laufwerke mit ENTFERNEN jeweils angeblich aus der Systemkonfiguration herauslöschen, aber real tut sich nichts. Sie sind da, bleiben da und lassen sich nicht mal umbenennen. Also bitte, bitte helft mir; ich bin mit meinem Latein am Ende.
Kommentar von Frank"A"delik am 22.12.2002 um 17:24
bei mir gab es Probleme in der Zeile:
sbstfn(sbstf) = Right$(strShell, Len(strShell) - 8)
so bald ich nicht mehr Laufwerk C benutzte... Ändert die 8 auf 6 und es geht. System: Windows ME
Kommentar von Jonathan am 05.12.2002 um 18:47
Wo ist das Problem?
Kopiere die CD auf die Festplatte in ein Bestimmtes Verzeichnis und erstele aus dem Verzeichnis mit obrigem Tipp ein Virtuelles LW
Kommentar von Jonny am 19.11.2002 um 13:05
Wie ist es möglich den Inhalt einer CD auf die Festplatte zu bekommen und daraus ein Virtuelles Laufwerk zu machen (Wie VirutalCD) ?
Kommentar von CHRTEK Network CNT am 10.11.2002 um 14:25
Eine Frage, gibt es auch eine Möglichkeit Subst in einer Windows Version zu nutzen, z.B. per API Aufruf, oder externer dll´s?