Autor Beitrag
mr.c
Hält's aus hier
Beiträge: 4

XP Pro SP2

BeitragVerfasst: Mo 19.09.05 14:42 
Guten Tag!

Ich bin im Programmieren mit Delphi nicht besonders versiert, deshalb habe ich eine grundlegende Frage.

Ist es möglich, ein Gerät, das an einen USB-Port angeschlossen wird, zu erkennen und dabei den USB-Port am Rechner bzw. am USB-Hub exakt zu lokalisieren? Wenn ja, wie kompliziert ist es, sowas zu realisieren? Gibt es dafür fertige Komponenten oder müssen entsprechende APIs selbst programmiert werden, möglicherweise sogar in C?

Ich würde mich über Hinweise und Tipps sehr freuen. Ich benutze Borland Delphi Version 7.0 - Personal Edition.

Dank schonmal im Voraus ... Al
Matthias
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 121



BeitragVerfasst: Mo 19.09.05 21:25 
Hy,

Grundsätzlich ist es möglich. Ich habe zwei Programme, die die Strucktur des USB als Baum darstellen mit allen daran angeschlossen Geräten.
Nur wie :? !? Keine Ahnung (zumindist zur Zeit nicht). Ich habe leider auch keine Zeit in der entsprechenden Literatur nachzu schaun. Irgendwann habe ich mal ein Programm geschrieben, welches den Device Descriptor eines USB-Gerätes ausliest. Ich kann ja mal schaun, ob ich es wieder finde.

ciao Matthias
digi_c
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1905

W98, XP
D7 PE, Lazarus, WinAVR
BeitragVerfasst: Di 20.09.05 10:51 
Also C brauchst du dafür sicherlich nicht, musst dich bloß "nur" in die Botschaftswarteschlange von Windows einklinken also WinAPI noch und nöcher.

Literatur zum Thema USB gibt es glaube ich von Kainka "Messen Steuern per USB" oder so, da wirst du etliche USB-Details finden, die du dafür benötigst.

Was soll es den werden?
mr.c Threadstarter
Hält's aus hier
Beiträge: 4

XP Pro SP2

BeitragVerfasst: Di 20.09.05 12:05 
Danke für die Antworten. Hmm... hört sich so an, als hätte man damit schon ein paar Tage zu kämpfen.

@Matthias: Wär natürlich super, wenn du bei dir noch was dazu finden würdest. Ich frage mich im Moment nur, wie man ohne entsprechendes Control überhaupt einen USB-Port anspricht.

@digi_c: "Messen Steuern per USB" - ist das ein Buch oder ein Betrag hier im Forum? Also eigentlich ist das, was ich machen möchte, zumindest vom Ablauf her recht simpel. Man schließt einen USB-Stick an irgendeinen USB-Port an einem USB-Hub an und es wird automatisch eine Datei draufkopiert. So weit kein Problem. Um allerdings dem User einen Hinweis zu geben, wenn der Kopiervorgang abgeschlossen ist, muss ich wissen, an welchem Port sich der Stick befindet, da es mehr als einen Port gibt und vielleicht auch mehr als ein Stick simultan angeschlossen ist.

Gruß ... Al
matze
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 4613
Erhaltene Danke: 24

XP home, prof
Delphi 2009 Prof,
BeitragVerfasst: Di 20.09.05 15:49 
du könntest auch mal im [url=www.swissdelphicente...ssdelphiCenter[/url] vorbeischauen. da gibts zum Thema USB was, glaube ich.

_________________
In the beginning was the word.
And the word was content-type: text/plain.
digi_c
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1905

W98, XP
D7 PE, Lazarus, WinAVR
BeitragVerfasst: Mi 21.09.05 09:37 
Das ist ein Buch, der Autor ist sehr bekannt für Hardwarebasteleien an COM,LPT,USB.

Hmm also ob der massive Aufwand lohnt nur um zu sagen "Zieh den Stick an USB1 aus"? Ich weiß nicht, der Nutzwert ist da nicht sehr hoch und das setzt vorraus, das der Benutzer weiß welcher Port USB1 ist :lol: außerdem sind weltweit nur wenige Leute in der Lage sofort zu vergssen wo sie ihren Stick rangesteckt haben ;)
Es würde doch reichen wenn du ihm die Bezeichnung des Volumens(Meine Digicam Speicherkarte heißt z.B. "Digicam) oder die Bezeichnung des Wechseldatenträgers(also des USB Sticks, wie im Auswerfen Menü) anzeigst.
mr.c Threadstarter
Hält's aus hier
Beiträge: 4

XP Pro SP2

BeitragVerfasst: Mi 21.09.05 13:22 
@digi_c:
Im Prinzip hast du recht. Allerdings ist der Aufbau in meinem Fall abstrakter. Der User hat keinen Zugriff auf den Computer, er sieht lediglich den Screen und ein paar USB-Ports um den Screen herum verteilt, kann seinen Stick irgendwo reinstecken, die Daten werden kopiert und er bekommt dann auf dem Screen an der Stelle, an der sich der von ihm benutzte Port befindet, den Hinweis, dass der Kopiervorgang beendet ist. Da mehrere Personen verschiedene Ports an einem Rechner benutzen können, muss ich wissen, an welchem Port konkret gerade kopiert wird und welcher Port noch frei ist.
Das Buch konnte ich bisher nirgends auftreiben (Amazon, ZVAB). Vielleicht ist es schon vergriffen. Ich such mal weiter ...
mr.c Threadstarter
Hält's aus hier
Beiträge: 4

XP Pro SP2

BeitragVerfasst: Mi 21.09.05 20:48 
Ich hab grade nochmal bei Amazon gesucht und ein Buch von Burkhard Kainka gefunden, das heißt "PC-Schnittstellen unter Windows" und ist für 44,50 Euro erhältlich. Ich denke, das war gemeint. In der Beschreibung heißt es, die mitgelieferte CD-Rom enthält .dll-Files mit den entsprechenden Befehlen, um die Ports am PC ansprechen zu können. Hört sich genau nach dem an, was ich gesucht habe. Allerdings steht explizit über den USB-Port nichts da. Da es ja auch ein serieller Port ist, könnte er thematisch in dem Buch schon erfasst sein. Ich wäre aber gerne sicher, immerhin sind knapp 45 Euro nicht wenig. Wer besitzt das Buch und kann mir sagen, ob auch die Funktionsweise eines Zugriffs auf Geräte am USB-Port beschrieben wird? Das Buch ist immerhin schon sechs Jahre alt und USB war damals noch nicht unbedingt so sehr verbreitet.

Danke schonmal ...

Ganz vergessen: Danke an matze für den Verweis zum SwissDelphiCenter. Ich hab da eine Weile gesucht und konnte sogar fertige Scripts finden. Allerdings ging es immer nur darum, zu überprüfen, ob ein bestimtes Gerät an einen USB-Port angeschlossen ist. Dazu muss man nur die Registry nach dem entsprechenden Eintrag durchsuchen. In meinem Fall ist es aber so, dass ein noch nicht registriertes Gerät angeschlossen wird, für das es noch keinen Registry-Eintrag gibt. Oder benutzen alle USB-Sticks gleichen Herstellers auch den gleichen Registry-Eintrag? Hmm ... vielleicht ging's ja so. Dazu müsste nur jeder Port auch über einen eigenen Registry-Eintrag verfügen.

Moderiert von user profile iconUGrohne: Beiträge zusammengefasst.
digi_c
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1905

W98, XP
D7 PE, Lazarus, WinAVR
BeitragVerfasst: Do 22.09.05 11:01 
Der hat viele Bücher geschrieben, kann auch sein es war von einem anderen, such mal eher nach "USB Delphi Franzis" da wirst du es bestimmt finden. Leider steck ich voll im Umzug ansonsten könnte ich dir am MO mal die ISBN geben aber das ist irgendwo in irgendeiner Kiste :/
Da steht drin wie USB funktioniert, die APIs und es wird eine Wrapperklasse dafür erstellt,schau am besten mal auf www.mikrocontroller.net vorbei, da sitzen Füchse die sich mit sowas auskennen ;)

Klar kannst du was über die Registry machen aber dann kriegst du eher nur die Zuordnung Massenspeicher an USB.
Die ganzen ob der gesamte Gerätemanager über Registry GUID Einträge herleitbar ist weiß ich nicht, denn da spielt ja viel zusammen Registry,Treiber,INF Dateien,...

Für dein Vorhaben musst du denke ich wirklich per WinAPI in das USB System rein und nachschauen, welche Geräte sich dort registriert haben.