Entwickler-Ecke
Windows API - Laufwerkstyp ermitteln
Peter18 - Do 24.05.12 11:30
Titel: Laufwerkstyp ermitteln
Ein freundliches Hallo an alle,
ich möchte den Laufwerkstyp eines beliebigen Laufwerkes ermitteln.
Ich verwende Delphi 4 und entwickle unter XP SP3.
Meine Versuche mit "GetDriveType" ergaben stets den gleichen Typ : "1". Auch ein direkter API-Aufruf ergab das gleiche Ergebnis! Excel-Basic liefert die Informationen, aber nicht über diese API, ein Aufruf von "GetDriveType" unter Excel erbrachte das gleiche Ergebnis wie Delphi, egal ob Usb-Stift, CD, Netzwerk oder Platte, stets war das Ergebnis "1". :(
Wer hat einen Tipp, wie ich sowohl unter einem alten Windows als auch unter einem neuen diese Informationen erhalte? Anscheinend liefert die "kernel32.dll" unter XP nicht mehr diese Information. Wie ich den Typ über ".Net" erhalte konnte ich bislang nicht herausfinden.
Vielen Dank für Eure Mühe und Grüße von der sonnigen Nordsee.
Peter
Moderiert von
Narses: Topic aus Dateizugriff verschoben am Do 24.05.2012 um 13:03
Popov - Do 24.05.12 20:39
Hier paar Funktionen die ich gelegentlich nutze:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56:
| function VolumeID(DriveChar: Char): string; var OldErrorMode : Integer; NotUsed, VolFlags : DWORD; Buf : array [0..MAX_PATH] of Char; begin OldErrorMode := SetErrorMode(SEM_FAILCRITICALERRORS); try GetVolumeInformation(PChar(DriveChar + ':\'), Buf, sizeof(Buf), nil, NotUsed, VolFlags, nil, 0); Result := Format('[%s]',[Buf]); finally SetErrorMode(OldErrorMode); end; end;
function DriveExists(DriveByte: Byte): Boolean; begin Result := GetLogicalDrives and (1 shl DriveByte) <> 0; end;
function DriveType(DriveByte: Byte): String; begin case GetDriveType(PChar(Chr(DriveByte + Ord('A')) + ':\')) of DRIVE_UNKNOWN: Result := 'unbekannt'; DRIVE_NO_ROOT_DIR: Result := 'Laufwerk existiert nicht'; DRIVE_REMOVABLE: Result := 'Wechselmedium'; DRIVE_FIXED: Result := 'Festplatte'; DRIVE_REMOTE: Result := 'Netzwerk'; DRIVE_CDROM: Result := 'CD-ROM/DVD'; DRIVE_RAMDISK: Result := 'RAM Disk'; else Result := 'anderer Laufwerkstyp'; end; end;
function DriveTypeOrVolumeId(DriveByte: Byte): String; begin case GetDriveType(PChar(Chr(DriveByte + Ord('A')) + ':\')) of DRIVE_UNKNOWN: Result := 'unbekannt'; DRIVE_NO_ROOT_DIR: Result := 'Laufwerk existiert nicht'; DRIVE_REMOVABLE: Result := 'Wechselmedium'; DRIVE_FIXED: Result := VolumeID(Chr(DriveByte + Ord('A'))); DRIVE_REMOTE: Result := 'Netzwerk'; DRIVE_CDROM: Result := 'CD-ROM/DVD'; DRIVE_RAMDISK: Result := 'RAM Disk'; else Result := 'anderer Laufwerkstyp'; end; end; |
Peter18 - Fr 25.05.12 10:06
Hallo jaenicke, hallo Popov,
danke Leute, Ihr habt mir die Augen geöffnet! :D Denn wer lesen kann ist klar im Vorteil!
In der Hilfe steht auch Pfad, aber ich habe zu kurz gedacht und nur die Laufwerksbuchstaben übergeben. So aber funktioniert auch ein UNC-Pfad!
Einen extra Dank an Popov für die Beispiele.
Freundliche Grüße von der sonnigen Nordsee
Peter
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!