Alle vorhandenen und gültigen Laufwerke ermitteln / auslesen
Veröffentlicht am 16.09.2008 von Sebastian Krogolewski
Um alle gültigen Laufwerke die auf dem System vorhanden sind zu ermitteln bietet uns die Win API die Funktion GetLogicalDriveStringsA bzw. GetLogicalDriveStringsW aus der Kernel32.Dll.
Einbinden der Win API Funktion GetLogicalDriveStringsA bzw. GetLogicalDriveStringsW als GetLogicalDriveStrings aus der Kernel32.Dll:
1 2 | Public Declare Function GetLogicalDriveStrings Lib "kernel32" Alias "GetLogicalDriveStringsA" ( _ ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long |
GetLogicalDriveStringsA erwartet 2 Parameter:
nBufferLength: größe des reservierten Speichers für die Rückgabe (Ohne abschließendes NULL). Wenn 0 übergeben wird, wird lpBuffer nicht verwendet.
lpBuffer: Ein Zeiger auf den für die Rüchgabe reservierten Speicher. Enthält mehrere Strings die durch NULL getrennt werden, die Strings werden mit einem zusätzlichen NULL abgeschlossen.
Rückgabewert:
Bei Erfolg: Tatsächliche länge der Rückgabe welche in lpBuffer zurückgegeben wird, ist der Wert größer als der in nBufferLength, dann ist es die größe des Speichers die benötigt wird. Das abschließende NULL wird nicht berücksichtigt.
Bei Fehlschlag: Wenn die Funktion fehlschlägt wird 0 zurückgeliefert.
1 2 3 4 56 7 8 9 1011 12 13 14 1516 | Public Function GetLogicalDrives() As String Dim strDrives As String Dim RetVal As Long 'Erstmal gucken wie groß der String sein muss um alle Daten aufzunehmenRetVal = GetLogicalDriveStrings(0, strDrives) If (RetVal > 0) Then 'Größe des Strings neu setzen und Laufwerke ermitteln strDrives = String$(RetVal, 0) RetVal = GetLogicalDriveStrings(Len(strDrives), strDrives) If (RetVal <> 0) Then 'Da der String mit einem vbNullChar abschließt diesen erstmal wegschneiden GetLogicalDrives = Left$(strDrives, RetVal - 1) End If End IfEnd Function |
Hinweis:
Die Funktion liefert einen String mit den Wurzelverzeichnissen, getrennt durch ein vbNullChar, der gültigen Laufwerke auf dem System wieder. Mit der Split Funktion kann man jetzt die einzelnen Werte in ein Array kopieren.
1
2
3
4
56
7
8
9
| Private Sub ShowDrives Dim strDrives() As String Dim i As Long strDrives = Split(GetLogicalDrives, vbNullChar)For i = LBound(strDrives) To UBound(strDrives) Step 1 MsgBox strDrives(i) Next i End Sub |






