Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi USB: Info über das gerade angesteckte Gerät (https://www.delphipraxis.net/133242-usb-info-ueber-das-gerade-angesteckte-geraet.html)

Carsten1234 28. Apr 2009 13:02


USB: Info über das gerade angesteckte Gerät
 
Hallo,

wenn via USB angeschlossen oder abgezogen wird, kommt ja von Windows ein wm_DeviceChange vorbei, auf das man ragieren kann. Das ist allerdings "nur" eine allgemeine Info, dass sich am USB was getan hat. Mich interessiert hingegen, ob man über das gerade angesteckte Gerät mehr Infos erfahren kann.
Geht das?

Gruß, Carsten

shmia 28. Apr 2009 16:44

Re: USB: Info über das gerade angesteckte Gerät
 
Gleich der 1. Treffer von Bei Google suchenwm_devicechange AND usb
findet den sehr interessanten und lehrreichen Artikel:
http://www.toolbox-mag.de/data/tx22005artikel1.pdf

p80286 28. Apr 2009 17:21

Re: USB: Info über das gerade angesteckte Gerät
 
Hallo zusammen,

Bei dem Artikel geht's ja vor allem um den Wechsel der Geräte.
Such mal nach Hier im Forum suchenWMI USB da kommt ganz gut was zusammen.

Gruß
K-H

Carsten1234 29. Apr 2009 12:06

Re: USB: Info über das gerade angesteckte Gerät
 
Der Artikel ist bekannt, beantwortet aber nicht meine Frage. :zwinker:

nicodex 29. Apr 2009 12:19

Re: USB: Info über das gerade angesteckte Gerät
 
Welches DBT-Ereignisse/Informationen fehlen dir denn?
Für Volumes und Ports werden auch ohne RegisterDeviceNotification Nachrichten an alle Hauptfenster gesendet.

Carsten1234 29. Apr 2009 14:04

Re: USB: Info über das gerade angesteckte Gerät
 
Zitat:

Zitat von p80286
Hallo zusammen,
Such mal nach Hier im Forum suchenWMI USB da kommt ganz gut was zusammen.

Danke für den Tipp, aber die WIN32_xxx classes geben da nicht wirklich was her für meine Zwecke. :gruebel:

Gruß, Carsten

Carsten1234 29. Apr 2009 14:07

Re: USB: Info über das gerade angesteckte Gerät
 
Zitat:

Zitat von nicodex
Welches DBT-Ereignisse/Informationen fehlen dir denn?
Für Volumes und Ports werden auch ohne RegisterDeviceNotification Nachrichten an alle Hauptfenster gesendet.

Gar keines, denn auf DBT_DEVICEARRIVAL und DBT_DEVICEREMOVECOMPLETE reagiere ich bereits. Beim DBT_DEVICEARRIVAL würde ich aber gerne noch erfahren, was da gerade für ein USB-Gerät (gut, in meinem Fall COM-Gerät, da Virtual COM Port Treiber) angestöpselt wurde.

Gruß, Carsten

nicodex 29. Apr 2009 15:36

Re: USB: Info über das gerade angesteckte Gerät
 
Zitat:

Zitat von Carsten1234
Beim DBT_DEVICEARRIVAL würde ich aber gerne noch erfahren, was da gerade für ein USB-Gerät (gut, in meinem Fall COM-Gerät, da Virtual COM Port Treiber) angestöpselt wurde.

Wenn der Name in der DEV_BROADCAST_PORT-Struktur nicht eindeutig ist (bzw. keine Möglichkeit bietet, von diesem auf das Gerät zu schließen) und keine andere Lösung findest, dann würdest du eine Liste mit den bekannten Geräten pflegen müssen (unschön).

OldGrumpy 29. Apr 2009 16:19

Re: USB: Info über das gerade angesteckte Gerät
 
Ab Vista gibts da ein schönes Usermode-Interface namens WinUSB. Was genau möchtest Du über das gerade angestöpselte Device denn wissen?

Carsten1234 30. Apr 2009 06:38

Re: USB: Info über das gerade angesteckte Gerät
 
Zitat:

Zitat von nicodex
Wenn der Name in der DEV_BROADCAST_PORT-Struktur nicht eindeutig ist (bzw. keine Möglichkeit bietet, von diesem auf das Gerät zu schließen) und keine andere Lösung findest, dann würdest du eine Liste mit den bekannten Geräten pflegen müssen (unschön).

Ich fürchte fast, dass da kein Weg dran vorbei führt, sowohl beim Programmstart diese Liste einzulesen als auch bei einem DBT_DEVICEARRIVAL jedes Mal die Liste neu einzulesen und mit den in der Liste bereits vorhandenen Geräten zu vergleichen.
Im Prinzip möchte ich ja nur die VID&PID des gerade angesteckten Geräts auslesen und hatte mich deswegen auch schon mit der MAGWMI beschäftigt.
Da es sich ja wie geschrieben bei meinem Gerät um ein USB-Gerät handelt, was via virtuellem COM-Port Treiber mit dem PC verbunden wird, hatte ich die MAG-Lib um den Eintrag 'Win32_SerialPort' aufgebohrt. Damit bekomme ich zwar beim Programmstart schön eine Liste alle über die COM-Ports angeschlossenen Geräte nebst VID&PID, wenn aber der DBT_DEVICEARRIVAL vorbei kommt und ich erneut versuche, via 'Win32_SerialPort' die Liste einzulesen, kommt die folgende Exception:
Ein ausgehender Aufruf kann nicht ausgeführt werden, da die Anwendung einen Eingabe-synchronisierten Aufruf weiterleitet.

Die Erklärung zur Exception findet sich hier von Andreas Kosch.
Wo anders fand ich noch den Hinweis, vor der Anfrage eine InSendMessage-Abfrage zu starten. Liefert diese true, kann ich nicht abfragen. Und das ist bei mir leider immer so bei einem DBT_DEVICEARRIVAL.

Gruß, Carsten

nicodex 30. Apr 2009 07:41

Re: USB: Info über das gerade angesteckte Gerät
 
Zitat:

Zitat von Carsten1234
Die Erklärung zur Exception findet sich hier von Andreas Kosch.
Wo anders fand ich noch den Hinweis, vor der Anfrage eine InSendMessage-Abfrage zu starten. Liefert diese true, kann ich nicht abfragen. Und das ist bei mir leider immer so bei einem DBT_DEVICEARRIVAL.

Poste dir selbst eine "Erinnerung" solange die Abfrage fehlschlägt (kann man auch TTimer, also WM_TIMER dafür nehen).

OldGrumpy 30. Apr 2009 08:25

Re: USB: Info über das gerade angesteckte Gerät
 
VID und PID bekommst Du aber auch ganz simpel ohne das ganze Gehampel. Ich habe sowas für Hardware mit USB/Seriell-Chip von FTDI im Einsatz. Du musst nur dafür sorgen, dass Du auch alle Notifications bekommst. Dazu einfach mittels RegisterDeviceNotification den Bedarf beim System anmelden und schon kriegst Du die relevanten Infos frei Haus. Dazu gabs auch schonmal einen Thread hier im Forum. Notfalls kann ich Dir ganz rudimentär was zusammenstellen...

Carsten1234 30. Apr 2009 08:37

Re: USB: Info über das gerade angesteckte Gerät
 
Zitat:

Zitat von OldGrumpy
Notfalls kann ich Dir ganz rudimentär was zusammenstellen...

:angel2: Haben wollen bitte. :mrgreen:

OldGrumpy 30. Apr 2009 09:25

Re: USB: Info über das gerade angesteckte Gerät
 
Liste der Anhänge anzeigen (Anzahl: 1)
Jaja, immer haben haben haben :mrgreen:

Nachtrag: Edith sagt, die Unit DBT ist Teil der JVCL, im Prinzip werden nur Strukturdefinitionen von dort benutzt...

Carsten1234 30. Apr 2009 09:38

Re: USB: Info über das gerade angesteckte Gerät
 
Zitat:

Zitat von OldGrumpy
Jaja, immer haben haben haben :mrgreen:

So sind sie, die Leute vom Stamme "Nimm". :mrgreen:

Danke!

p80286 30. Apr 2009 10:59

Re: USB: Info über das gerade angesteckte Gerät
 
Hallo OldGrumpy,

darf ich bitte bitte auch partizipieren?
(bei mir geht's um Kartenleser, die aber schon stecken müssten)

Gruß
K-H

OldGrumpy 30. Apr 2009 11:30

Re: USB: Info über das gerade angesteckte Gerät
 
Zitat:

Zitat von p80286
darf ich bitte bitte auch partizipieren?
(bei mir geht's um Kartenleser, die aber schon stecken müssten)

Wenn Dir die oben angehängte Demo nicht reicht, darfst Du mich gerne anheuern um entsprechenden Code zu entwickeln :)

Carsten1234 30. Apr 2009 13:53

Re: USB: Info über das gerade angesteckte Gerät
 
Hallo OldGrumpy,

klasse, lüppt und reicht (mir) so hin.
Danke nochmals! :cheers:

p80286 30. Apr 2009 16:00

Re: USB: Info über das gerade angesteckte Gerät
 
omnia me culpa....

ich hab' den Anhang übersehen!

Sack und Asche über mein Haupt.

vielen Dank! mal sehen was sich daraus machen läßt.

Gruß
K-H

Schwedenbitter 17. Sep 2009 16:56

Re: USB: Info über das gerade angesteckte Gerät
 
Hallo,

ich würde auch gern ...
Zitat:

Zitat von OldGrumpy
Wenn Dir die oben angehängte Demo nicht reicht, darfst Du mich gerne anheuern um entsprechenden Code zu entwickeln :)

Vermutlich reicht schon die Demo :lol: . Aber wo bekomme ich Unwissender die eingebundene Unit DBT her?

Gruß, Alex

OldGrumpy 17. Sep 2009 17:22

Re: USB: Info über das gerade angesteckte Gerät
 
Hi,

die Unit DBT ist Bestandteil der JVCL.

Schwedenbitter 17. Sep 2009 21:49

Re: USB: Info über das gerade angesteckte Gerät
 
Zitat:

Zitat von OldGrumpy
Hi,

die Unit DBT ist Bestandteil der JVCL.

Du bist ein :angel:

Tausend Dank! Läuft jetzt ...

OldGrumpy 18. Sep 2009 11:49

Re: USB: Info über das gerade angesteckte Gerät
 
Das stand aber auch schon in Post #14 weiter oben :mrgreen:


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:11 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