Delphi-PRAXiS
Seite 1 von 3  1 23      

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


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:28 Uhr.
Seite 1 von 3  1 23      

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