AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Laufwerksbuchstaben aus device-name ermitteln

Laufwerksbuchstaben aus device-name ermitteln

Ein Thema von Gerd01 · begonnen am 26. Jul 2007 · letzter Beitrag vom 30. Jul 2007
Antwort Antwort
Seite 1 von 2  1 2   
Gerd01

Registriert seit: 18. Mär 2005
Ort: NRW
117 Beiträge
 
Delphi XE2 Professional
 
#1

Laufwerksbuchstaben aus device-name ermitteln

  Alt 26. Jul 2007, 15:28
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
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#2

Re: Laufwerksbuchstaben aus device-name ermitteln

  Alt 26. Jul 2007, 16:09
Gibt es das /device/cdrom0 ueberhaupt?
  Mit Zitat antworten Zitat
Reinhard Kern

Registriert seit: 22. Okt 2006
772 Beiträge
 
#3

Re: Laufwerksbuchstaben aus device-name ermitteln

  Alt 26. Jul 2007, 18:16
Zitat von Gerd01:
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
Dann ist die Umkehrung ja kein Problem: einfach C bis Z abfragen, ob der Device-Name der gesuchte ist. Ob es einen direkteren Weg gibt, weiss ich im Moment auch nicht auswendig.

Gruss Reinhard
  Mit Zitat antworten Zitat
Gerd01

Registriert seit: 18. Mär 2005
Ort: NRW
117 Beiträge
 
Delphi XE2 Professional
 
#4

Re: Laufwerksbuchstaben aus device-name ermitteln

  Alt 26. Jul 2007, 18:29
Zitat von Robert Marquardt:
Gibt es das /device/cdrom0 ueberhaupt?
Ja sicher es gibt auch /device/cdrom1 und weitere wenn du mehrere CD_laufwerke hast.

Ich habe mitllerweile eine Funktion gefunden.

Delphi-Quellcode:
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;
Mit:
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.
  Mit Zitat antworten Zitat
hathor
(Gast)

n/a Beiträge
 
#5

Re: Laufwerksbuchstaben aus device-name ermitteln

  Alt 26. Jul 2007, 22:07
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;
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#6

Re: Laufwerksbuchstaben aus device-name ermitteln

  Alt 27. Jul 2007, 06:11
Wie steht's mit session-lokalen Gerätenamen (und Laufwerksbuchstaben)?

Zitat von Gerd01:
Zitat von Robert Marquardt:
Gibt es das /device/cdrom0 ueberhaupt?
Ja sicher es gibt auch /device/cdrom1 und weitere wenn du mehrere CD_laufwerke hast.
Soso und in welchem Namensraum ist das? Sieht ein bißchen linuxig aus, ist aber nicht Cygwin oder SFU. Robert's Frage hat hier durchaus ihre Berechtigung und Reinhard hat den korrekten Weg aufgezeigt. Von Win32 aus kannst du ohnehin nur implizit über DefineDosDevice() mit dem Flag DDD_RAW_TARGET_PATH auf das Objektverzeichnis \Device zugreifen. Ich vermute mal, daß es das ist was du meinst. Sonst bleibt für dich nur auf \??\CdRomX (was üblicherweise automatisch vom System angelegt wird und auf das entsprechende \Device\CdRomX zeigt) zuzugreifen.

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.
  Mit Zitat antworten Zitat
Gerd01

Registriert seit: 18. Mär 2005
Ort: NRW
117 Beiträge
 
Delphi XE2 Professional
 
#7

Re: Laufwerksbuchstaben aus device-name ermitteln

  Alt 28. Jul 2007, 11:33
Hallo Olli,

nun mal nicht so von oben herab. 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".

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.
  Mit Zitat antworten Zitat
Alter Mann

Registriert seit: 15. Nov 2003
Ort: Berlin
903 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#8

Re: Laufwerksbuchstaben aus device-name ermitteln

  Alt 28. Jul 2007, 11:53
Hallo Gerd01,

wenn Du statt GetPath GetDisplayName nimmst,
kannst Du anschließend mit WMI Win32_CDROMDRIVE
den Laufwerksbuchstaben herausbekommen.

Dein Angebot zu IMAPI ist angenommen.

Gruß
  Mit Zitat antworten Zitat
Gerd01

Registriert seit: 18. Mär 2005
Ort: NRW
117 Beiträge
 
Delphi XE2 Professional
 
#9

Re: Laufwerksbuchstaben aus device-name ermitteln

  Alt 28. Jul 2007, 12:04
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): http://derentwickler.de/itr/online_a...nodeid,56.html . Den Beispielcode findet du auf der Page unter Links und Literatur.

Siehe auch hier: http://www.uaconsulting.de/de/downlo...tm#sourcecodes

Eine weitere Komponente (TXPBurn) findest du hier: http://www.bayden.com/delphi/xpburn.htm
  Mit Zitat antworten Zitat
Alter Mann

Registriert seit: 15. Nov 2003
Ort: Berlin
903 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#10

Re: Laufwerksbuchstaben aus device-name ermitteln

  Alt 28. Jul 2007, 12:22
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]
Angehängte Dateien
Dateityp: exe xpbdl_968.exe (178,0 KB, 13x aufgerufen)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:17 Uhr.
Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf