![]() |
Laufwerksbuchstaben aus device-name ermitteln
Hallo Leute,
wie kann ich aus einem device-namen ( Beispiel: /device/cdrom0 für das erste CD-Laufwerk) den Laufwerksbuchstaben ( D:/ oder E:/ etc ) ermitteln? Welche API-Funktion gibts dazu? Die Funktion QueryDosDevice gibts ja. Nur halt für die Ermittlung des device-namens aus dem Laufwerksbuchstaben. Gruß Gerd |
Re: Laufwerksbuchstaben aus device-name ermitteln
Gibt es das /device/cdrom0 ueberhaupt?
|
Re: Laufwerksbuchstaben aus device-name ermitteln
Zitat:
Gruss Reinhard |
Re: Laufwerksbuchstaben aus device-name ermitteln
Zitat:
Ich habe mitllerweile eine Funktion gefunden.
Delphi-Quellcode:
Mit:
function GetDosDevice(CDDriveID:integer):string;
var Buffer : array[0..500] of char; TmpPC : PChar; CdCtr:integer ; begin CdCtr := 0 ; result := ''; GetLogicalDriveStrings(SizeOf(Buffer),Buffer); TmpPC := Buffer; while TmpPC[0] <> #0 do begin if Windows.GetDriveType(TmpPC) = DRIVE_CDROM then begin if CdCtr = CdDriveId then begin result := TmpPC; exit; end; CdCtr := CdCtr+1; end ; TmpPC := StrEnd(TmpPC)+1; end; end; Var Last : Char; LW : String; und LW := '/device/cdrom0'; Last := LW[Length(LW)]; LW := GetDosDevice(StrToIntDef(LW,0)); hole ich LW die Laufwerk bzw CD-ROM Bezeichnung. |
Re: Laufwerksbuchstaben aus device-name ermitteln
Es geht auch so:
Delphi-Quellcode:
Function GetCDROM:string;
var DriveType, i: integer; LW, Drive : String; begin i := 1; LW := 'cdrom0'; repeat Drive:= Chr(i+64); DriveType := GetDriveType(PChar(Format('%S:\',[Drive]))) ; if DriveType=5 then Begin result:= GetDosDevice(StrToIntDef(LW,0)); break; end; inc (i); until i=27; end; |
Re: Laufwerksbuchstaben aus device-name ermitteln
Wie steht's mit session-lokalen Gerätenamen (und Laufwerksbuchstaben)? :stupid:
Zitat:
Ansonsten ist das Anliegen an sich schon ... nunja ... fragwürdig, weil nämlich der Gerätename (\Device\*) immer eindeutig ist, ein Laufwerksbuchstabe hingegen nicht. Bei einem System mit 2 Festplatten und einem CD-ROM-Laufwerk kann ich bspw. auch, nachdem C: und D: für die Partitionen vergeben sind, die Laufwerksbuchstaben E: bis Z: für das (gleiche!) CD-ROM-Laufwerk vergeben. Mag zwar seltsam klingen, ist aber gut und gern möglich und vor allem vollkommmen legitim! Die Funktion GetDosDevice() wie oben dargestellt wird übrigens schon auf einem "normalen" System (wo man ein 1:1-Mapping hat) nicht immer funktionieren, weil man nämlich auch dort die Buchstaben in einer anderen Reihenfolge als in welcher die Geräte logisch beim "Gerätemanager" angemeldet wurden auf Laufwerksbuchstaben mappen kann. Laufwerk R: kann gut und gerne auf \Device\CdRom3 verweisen, während U: bis W: auf \Device\CdRom0 bis \Device\CdRom2 verweisen. Was dann? Die o.g. Funktion GetDosDevice() baut dann mal eben Mist. Abgesehen davon kann man bestimmte CD-Laufwerke auch entfernen, so daß CdRom0 nicht immer das erste gültige Gerät in einem laufenden System sein muß. Ich würde dringend empfehlen mal WinObj von Sysinternals runterzuladen und dort mal ein wenig durch den Namensraum des NT-Objektmanagers browsen, damit du ein Gefühl dafür bekommst was eigentlich so unter der Haube los ist. |
Re: Laufwerksbuchstaben aus device-name ermitteln
Hallo Olli,
nun mal nicht so von oben herab. :roll: Etwas kenne ich mich schon aus. Die Device-Bezeichnung ist nicht "linux-lastig" sondern wird vom XP-Betriebsystem von Microsoft geliefert und die sind ja bekanntlich nicht so "linux-lastig". :lol: Nun zur Sache damit du auch weisst warum ich die Frage stellte. Wenn du die Betriebssystemschnittstelle (Imapi, nicht mit mapi verwechseln!) unter XP zum Brennen nutzt, dann mit IEnumDiscRecorders die Eigenschaften des Brenners abfragst dann kommt in getpath halt als Antwort /device/cdrom0 oder /device/cdrom1 etc bei mehrerer Brennern. Also meine Frage hatte schon einen Hintergrund. Wen das Handling der Imapi-Schnittstelle unter Delphi interessiert möge sich bei mir melden. Ich habe weitergehende Informationen. Gruß Gerd. |
Re: Laufwerksbuchstaben aus device-name ermitteln
Hallo Gerd01,
wenn Du statt GetPath GetDisplayName nimmst, kannst Du anschließend mit ![]() den Laufwerksbuchstaben herausbekommen. Dein Angebot zu IMAPI ist angenommen. Gruß |
Re: Laufwerksbuchstaben aus device-name ermitteln
Hier die Info-Links zu imapi. Ich habe mit diesen Informationen eine ganz brauchbare Brennfunktion in meinem Delphi-Programm implementiert.
Eine sehr gute Beschreibung mit Beispielcode findet du hier (Entwickler): ![]() Siehe auch hier: ![]() Eine weitere Komponente (TXPBurn) findest du hier: ![]() |
Re: Laufwerksbuchstaben aus device-name ermitteln
Liste der Anhänge anzeigen (Anzahl: 1)
Gerd01
Den Artikel von Bernd Ua kenne ich, hatte mir das Heft gekauft. TXPBurn werden ich mir anschauen. Danke und Gruß [Edit] Ich habe mal ein kleines Prog angefügt. In die Editbox kommt der DisplayName und mit ein bischen Glück wird der Laufwerksbuchstabe zurückgegeben. Läuft nur auf dem lokalen Windows-XP Rechner! [/Edit] |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:31 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz