Laufwerkstyp ermitteln
Veröffentlicht am 02.10.2008 von Sebastian Krogolewski
Um das Ausführen der eigenen Anwendung oder das Speichern bzw. Öffnen von Dateien aus der Anwendung heraus auf bestimmten Laufwerkstypen zu verweigern, muss man den Laufwerkstypen bestimmen. In Visual Basic ist leider standardmässig keine Implementierung vorhanden, die Win API bietet; hier aber mit der Funktion GetDriveTypeA bzw. GetDriveTypeW aus der Kernel32.Dll eine Möglichkeit, dies nachzuholen. Sie ermittelt aus dem Wurzelverzeichnis des Laufwerks den Laufwerkstypen. Natürlich gibt es auch andere Verwendungsmöglichkeiten.
Rückgabe Konstanten:
1
2
3
4
56
7
| Private Const DRIVE_UNKNOWN = &H0 ' unbekannter Laufwerkstyp Private Const DRIVE_NO_ROOT_DIR = &H1 ' kein Hauptverzeichnis Private Const DRIVE_REMOVABLE = &H2 ' Wechselmedium Private Const DRIVE_FIXED = &H3 ' Festplatte Private Const DRIVE_REMOTE = &H4 ' NetzwerklaufwerkPrivate Const DRIVE_CDROM = &H5 ' CD/DVD Laufwerk Private Const DRIVE_RAMDISK = &H6 ' RAM-Disk |
Einbinden der Win API Funktion GetDriveTypeA bzw. GetDriveTypeW als GetDriveTypeAPI aus der Kernel32.Dll:
1 | Private Declare Function GetDriveTypeAPI Lib "kernel32" Alias "GetDriveTypeA" (ByVal nDrive As String) As Long |
GetDriveTypeA bzw. GetDriveTypeW erwartet 1 Parameter:
lpRootPathName: Das Wurzelverzeichnis (mit abschließenen Backslash) des Laufwerks für den der Lauwerkstyp ermittelt werden soll. Wird NULL übergeben wird das Wurzelverzeichnis des aktuellen Verzeichnises verwendet.
Rückgabewert:
Folgende Liste zeigt die möglichen Werte und Ihre Bedeutungen an, welche die Funktion zurückliefert.
Konstante Wert Beschreibung DRIVE_UNKNOWN &H0 unbekannter Laufwerkstyp DRIVE_NO_ROOT_DIR &H1 kein Hauptverzeichnis DRIVE_REMOVABLE &H2 Wechselmedium DRIVE_FIXED &H3 Festplatte DRIVE_REMOTE &H4 Netzwerklaufwerk DRIVE_CDROM &H5 CD/DVD Laufwerk DRIVE_RAMDISK &H6 RAM-Disk
Deklaration eines Enums um nicht direkt mit den Konstanten arbeiten zu müssen.
1
2
3
4
56
7
8
9
| Public Enum enDriveType vbDriveTypeUnknown = DRIVE_UNKNOWN vbDriveTypeNoRootDir = DRIVE_NO_ROOT_DIR vbDriveTypeRemoveable = DRIVE_REMOVABLE vbDriveTypeFixed = DRIVE_FIXED vbDriveTypeRemote = DRIVE_REMOTE vbDriveTypeCDROM = DRIVE_CDROM vbDriveTypeRamDisk = DRIVE_RAMDISK End Enum |
1 2 3 4 | Public Function GetDriveType(ByVal Drive As String) As enDriveType GetDriveType = GetDriveTypeAPI(Left$(Drive, 1) & ":\") End Function |
Hinweis:
Der Laufwerksbuchstabe kann auch als komplette Pfadangabe übergeben werden. Die Funktion ermittelt dann das Wurzelverzeichnis des Laufwerks automatisch.






