Entwickler-Ecke

Windows API - Wie komme ich an Laufwerks Hardware Namen?


reallyOne - Fr 14.05.04 19:34
Titel: Wie komme ich an Laufwerks Hardware Namen?
Ich habe ein Laufwerk, von dem ich gerne den Hardwarenamen auslesen will. Gibt es da einen Weg? Alles, was ich gefunden hab, hat nur den Volumenamen geliefert.

Also ich will den Namen, den man findet, wenn man aufs Laufwerk > Rechtsklick > Eigenschaften > Hardware klickt, in der Liste unter Name steht.

Es handelt sich um ein USB-Laufwerk, was in Windows als Lokaler Datenträger angezeigt wird. Ich will halt überprüfen, ob ein USB-Laufwerk mit einem bestimmten Namen eingesteckt ist.

Vielen Dank schonmal


CrazyLuke - Mi 07.07.04 13:03

Da es mich auch interessiert, schieb ich die Frage mal nach oben...

EDIT: Dann könnte ich auch auf die Anzeige des Mediumtitels in der ComboBox verzichten: http://www.delphi-forum.de/viewtopic.php?t=26058


fuser - Do 08.07.04 09:05

Hallo!
Hab' ich auch schon gesucht und nichts richtiges gefunden.
Da hier noch niemand eine Lösung geschrieben hat,
hier zumindest 'mal eine schlechte Lösung:

mit ollem DOS-dir
dir f: > c:\test.txt
eine Textdatei erstellen und parsen.

Zur Info: In WIN gibt's noch

\HARDWARE\DEVICEMAP\Scsi\Scsi Port 0\Scsi Bus 0\Target Id 0\Logical Unit Id 0','Identifier
z.B. Maxtor 6E030L0
z.B. MITSUMI CD-ROM FX4820T!B


\HARDWARE\DEVICEMAP\Scsi\Scsi Port 0\Scsi Bus 0\Target Id 0\Logical Unit Id 0','Type
z.B. DiskPeripheral
z.B. CdRomPeripheral


GetDriveType()
DRIVE_REMOVABLE
DRIVE_FIXED
DRIVE_REMOTE
DRIVE_CDROM
DRIVE_RAMDISK

Vielleicht kannst Du damit auch was anfangen.
Alles nicht ideal, aber vielleicht besser als gar nichts.


Delete - Do 08.07.04 10:44

Also die von den Festplatten stehen in der Registry.


CrazyLuke - Do 08.07.04 13:58

@ fuser:
Leider bin ich noch blutiger Anfänger, kann mit bloßen Stichworten also nicht viel anfangen, aber es gibt ja glücklicherweise ne Forensuche und Google...

@ Luckie:
Das bringt mir bei ner ComboBox mit CD- & DVD-Laufwerkseinträgen nicht viel :roll:


Delete - Do 08.07.04 22:22

Dann musst du sie dir eben aus der Registry suchen. Wenn ich von A über B nicht nach C komme dann probiere ich es eben von A über D nach C. :roll:


CrazyLuke - Fr 09.07.04 09:49

Die Laufwerksbezeichnungen gibts zwar in der Registry, da find ich aber nicht die dazugehörigen Laufwerksbuchstaben :-( Und das muss ja irgendwie zusammenpassen...


Delete - Fr 09.07.04 12:59

Also, in der Registry von Win98 steht der aktuell benutzte Buchstabe dabei (CurrentDriveLetterAssignment). Aber mal nebenbei: Ich wusste doch, dass wir das Hardware-Thema schon mal hatten; klick [http://www.delphi-forum.de/viewtopic.php?t=13263].


CrazyLuke - So 18.07.04 12:59

Hi!

"CurrentDriveLetterAssignment" hat bei der Registry-Suche unter XP nix gebracht. Auch die manuelle Suche im Ordner "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\IDE" erbrachte keine ERgebnisse.

"DriveLetter"-Suche in Registry fand nur Einträge bei Fremdprogrammen wie Feurio und Magix PlayR Jukebox. :?


BenBE - So 18.07.04 19:11

Die Laufwerksbuchstaben unter WinNT-basierten Systemen stehen in

HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices

Wie diese zu lesen sind, sollte anhand der Werte eigentlich klar ersichtlich sein.


CrazyLuke - Di 20.07.04 10:21

user defined image
Das ist glaub ich im Mom noch zu hoch für mich, dann werd ich erstmaöl versuchen, dass der AKS-Prüfer auch so funzt...

Trotzdem danke 8)


Delete - Di 20.07.04 12:15

Ich halte von solchen Registry-Zugriffen in diesen Fällen, offen gesagt, nicht viel. Ich bin sicher, dass Microsoft entsprechende API-Funktionen zur Verfügung stellt. Man muss eben nur mal die Muße haben und sich im MSDN umschauen, bzw. man wendet sich an Wissende und quetscht diese aus.

Bei einem direkten Zugriff auf die Registry musst du immer davon ausgehen, dass der Speicherort in jedem Windows ein anderer sein kann. Soll heißen: es kann funktionieren, muss es aber nicht. Und du musst solche Probleme berücksichtigen. Das siehst du ja auch im gezeigten Link. Um die Hardware auszulesen, musst du für 9x und NT zwei verschiedene Pfade beachten. Und dann gibt´s unter NT zusätzliche Einträge, die du unter 9x nicht findest.
Da es aber diverse Diagnose- und SysInfo-Tools gibt, die unabhängig vom OS die jeweils gleichen Daten anzeigen (Hardwarenamen, usw.), gibt es IMHO auch entsprechende Funktionen.


jaenicke - Di 12.10.04 15:21

Hmm, auch wenn du nichts davon hälst: Kannst du (oder jemand anderes natürlich) mir vielleicht sagen, wie ich diese Werte auslesen kann?

Ich hab das ganz normal mit TRegistry.ReadBinaryData probiert, nur hat das leider in diesem Fall nicht funktioniert. (Ich hab denselben Quelltext genommen, den ich bei selbst erstellten Einträgen benutzt habe.)
Wo liegt der Unterschied?
Als Größeninformation bekomme ich auch einen falschen Wert (der ist eindeutig für den Inhalt zu klein).

Den Quelltext poste ich noch, falls nötig (den hab ich grad nicht da).

Danke, Leute
Sebastian Jänicke


Dungeon Master - Sa 06.11.04 19:40

Hi...
ich habe das mal mit meinem USB-Stick ausbrobiert mit folgendem Ergebnis :

Unter Win 98 SE :

HKEY_LOCLA_MACHINE\Enum\SCSI\[Bezeichnung]\[Bezeichnung]\ProduktID

steht die Bezeichnung

ob der Stick auch vorhanden ist :

HKEY_DYN_DATA\ConfigManager\Enum\[Unterverzeichnisse]\HardWareKey

muss ProduktID enthalten, dann ist der Stick vorhanden.

unter WIN 2000 Prof.

HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\USBSTOR\[Bezeichnung]\[Bezeichnung]\FriendlyName

steht die Bezeichnung

ob der Stick auch vorhanden ist sieht man wenn der Eintrag

HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\USBSTOR\[Bezeichnung]\[Bezeichnung]\Control\DeviceReference

vorhanden ist.

Ich hoffe das hilft weiter

mfg

André


jaenicke - Mo 08.11.04 10:28

Mein Post hat sich erledigt.

Ich hab inzwischen alles hinbekommen. Das mit MountedDevices geht übrigens nur unter Win2k/WinXP, aber für Win9x/ME habe ich inzwischen auch eine Lösung.

Wen die ursprüngliche Frage noch interessiert: Ich mache gerade einen FAQ Eintrag zu dem Thema. Ich poste hier den Link, sobald ich den Eintrag fertig habe.