Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Laufwerkpfad erkennen, welcher ein USB-Stick ist! (https://www.delphipraxis.net/39091-laufwerkpfad-erkennen-welcher-ein-usb-stick-ist.html)

Plague 28. Jan 2005 15:11


Laufwerkpfad erkennen, welcher ein USB-Stick ist!
 
Hallo,

mein Titel ist vielleicht etwas unglücklich ausgedrückt.
Ich möchte mit Delphi erkennen welches Laufwerk es ist, das als Wechsellaufwerk durch mein USB-Stick erzeugt wurde.
Zweck soll es sein, eine codierte Datei auf diesem Stick zu speichern, die dann ausgelesen wir
--> F:/Datei.dat

Weiß jemand wie das geht?
Gruß
Thomas

shmia 28. Jan 2005 15:53

Re: Laufwerkpfad erkennen, welcher ein USB-Stick ist!
 
Delphi-Quellcode:
var
   drive : char;
for drive := 'D' to 'Z' do
begin
   case GetDriveType(PChar(drive+':\')) of
      DRIVE_REMOVABLE:
         ShowMessage('hier isses ! '+drive);

   end;
end;
Mit GetvolumeInformation kannst du noch mehr Infos auslesen.

Plague 28. Jan 2005 16:27

Re: Laufwerkpfad erkennen, welcher ein USB-Stick ist!
 
Danke ich werde es ausprobieren...

Welche weiteren Informationen könnte man denn mit dieser Funktion auslesen?

Gruß
Thomas

Alter Mann 28. Jan 2005 17:20

Re: Laufwerkpfad erkennen, welcher ein USB-Stick ist!
 
Hallo Plague,

ganz so einfach, wie shmia es schreibt ist es nun doch nicht. Es sei Du willst nur ein Stick anschließen, bei
mehreren Klappt es nicht.

Plague 28. Jan 2005 22:41

Re: Laufwerkpfad erkennen, welcher ein USB-Stick ist!
 
Im Prinzip möchte ich nur einen Stick anschließen. Interessant wäre es aber auch wenn man zusätzlich auch eine Digitalkamera anschließt. Die werden ja auch oft als Wechseldatenspeicher angezeigt. Welcher Fehler wird hier auftreten?

Gruß
Thomas

Robert Marquardt 29. Jan 2005 05:31

Re: Laufwerkpfad erkennen, welcher ein USB-Stick ist!
 
Ich beschaeftige mich gerade genau mit diesem Problem.
Dazu muss man das Setup API und das Config Manager API bemuehen.
Beide Konversionen erscheinen bald (naechste Woche) auf http://www.sf.net/projects/jedi-apilib
Ich werde dann ein Demoprogramm zu diesem Thema beifuegen.

Alter Mann 29. Jan 2005 11:09

Re: Laufwerkpfad erkennen, welcher ein USB-Stick ist!
 
Welcher Wohl?
Die Routine von shmia gibt Dir die Laufwerksbuchstaben aus, also "F:\, H:\" usw.
Du weisst aber nicht, ob F:\ jetzt der Stick ist, oder der Speicherchip der Digitalkamera.

Am bessten wäre es, wenn Du Dich zur Einführung in die Thematik das hier durchliest:USB Device Lister

Robert Marquardt 29. Jan 2005 14:21

Re: Laufwerkpfad erkennen, welcher ein USB-Stick ist!
 
Ich habe mich inzwischen auch mit der von "USB Device Lister" benutzten Methode auseinandergesetzt.
Da kann der Rechner Schluckauf bekommen, wenn man das direkt nach einer WM_DEVICECHANGE macht.

Meine aktuelle Methode ist die Volumes mit Setup API aufzaehlen und dann mit dem Config Manager API
im Baum der Geraete nach oben zu klettern bis man beim Bus-Device ist. Dort kann man dann leicht
den Namen des Busses herausbekommen.
Die Laufwerksbuchstaben matcht man ueber die Mount Points.

Alter Mann 29. Jan 2005 19:11

Re: Laufwerkpfad erkennen, welcher ein USB-Stick ist!
 
Hallo Robert,

wie geht's, ein besseres Neues Jahr wünsche ich Dir noch!

Das mit dem WM_DEVICECHANGE hatte ich auch, habe es Versucht damit zu lösen, dass ein Timer 2-Sek. wartet und dann agiert.
Brachte es aber nicht :? Letzt endlich bin ich doch bei der dirkten Action geblieben. Hängt warscheinlich von der
Prozessorauslastung ab. Je nachdem was Los ist, dauert es bis man auf WM_CHANGEDEVICE reagieren kann.

PS: Ruf mal an.

Robert Marquardt 30. Jan 2005 05:00

Re: Laufwerkpfad erkennen, welcher ein USB-Stick ist!
 
Ja, das Traversieren ueber die USB Treiber ist problematisch.
Was passieren kann ist das das "surprise removal" fehlerhaft erscheint.
Offensichtlich ist ein Geraeteknoten deaktiviert und beim Traversieren wird er faelschlich aktiviert.
Das kann einem richtig auf den Sack gehen, da es die einzige Methode ist direkt an den
Seriennummernstring eines Geraetes zu kommen. Jetzt loese ich das indem ich einen Registry-Eintrag auswerte.

Ruf du mich doch an. Ich stehe im Telefonbuch.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:20 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz