C/C++: USB-Geräte suchen und auflisten

Gast #4336379
Lesenswert?
• ▲
▼
Hallo zusammen,

ich Arbeite derzeit an einem Projekt, wo wir mit USB-Geräten arbeiten. 
Nun wäre es für uns bzw. für das Programm hilfreich, wenn es wüsste, 
welche USB-Geräte an dem Computer angeschlossen sind.

Gibt es eine Möglichkeit, um folgende Geräte zu erkennen und automatisch 
zum Beipiel in deiner ListBox anzeigen zu lassen?


Wir Arbeiten unter Windows (7 aufwärts) und nützen Dev-C++. Im Grunde 
würde uns eine Lösung reichen, um ALLE USB-Geräte zu erkennen (in einer 
Win32 Anwendung). Ich glaub, das Anzeigen schaffen wir alleine.

Danke im Voraus schon mal, für alle Beträge.
Gast #4336412
Lesenswert?
• ▲
▼
Vielen Dank Peter II für die schnelle Hilfe.

Ich hab mal kurz reingelesen und glaube, das es uns weiterhelfen wird. 
Am Freitag haben wir unser nächtest Treffen, dann weiß ich mehr. 
Gegebenen Falls melde ich mich noch mal.

Herzliche Grüße
BlackShadow
Gast #4336556
Lesenswert?
• ▲
▼
BlackShadow schrieb:

> Gibt es eine Möglichkeit, um folgende Geräte zu erkennen und automatisch
> zum Beipiel in deiner ListBox anzeigen zu lassen?

Windows bietet dafür gleich zwei APIs an. Das "SetupDi"-API und das 
"WMI"-API. Du musst einfach nur die Doku dazu lesen und den Kram 
verwenden.

Übrigens sind beide APIs relativ statisch. Um auch live Gerätewechsel 
(z.B. das Anstöpseln eines neuen Gerätes) mitzubekommen, mußt du ein 
Fenster erzeugen, dieses für den Empfang von WM_DEVICECHANGE-Botschaften 
registrieren und dann auf eben diese Botschaften reagieren.
#4341999
Lesenswert?
• ▲
▼
Ziemlich schnell geschrieben: Dazu benötigst du die Signal11 HID-Api 
(http://www.signal11.us/oss/hidapi/)

Der Quelltext sieht dann so aus:
1
#include <iostream>
2
#include "hidapi.h"
3

4
using namespace std;
5

6
int main()
7
{
8
    struct hid_device_info *devs, *cur_dev;
9

10
    devs = hid_enumerate(0x0, 0x0);
11
    cur_dev = devs;
12
    while (cur_dev) {
13
        cout << "Device Found\n  type: " << cur_dev->vendor_id << " " <<  cur_dev->product_id << endl << "Path " << cur_dev->path << endl << "Seriennummer " << cur_dev->serial_number<< endl;
14
        cout << " Hersteller: " << cur_dev->manufacturer_string << endl << " Produkt: " << cur_dev->product_string << endl;
15
        cur_dev = cur_dev->next;
16
    }
17
    hid_free_enumeration(devs);
18

19
    hid_device* usb_device;
20
    hid_init();
21
    usb_device = hid_open(5824,1503,NULL);
22

23
    if(usb_device==NULL) {
24
        cout << "Konnte keine Verbindung herstellen";
25
    } else {
26
        cout << "Verbindung mit USB Geraet hergestellt!";
27
    }
28

29
    return 0;
30
}

Zeigt dir direkt alle angeschlossenen Geräte an.
#4342111
Lesenswert?
• ▲
▼
Mit Speichermedien habe ich es noch nicht probiert. Allerdings gibt es 
auch in der HID Spezifikation die Möglichkeit "Mass Storages" anzugeben, 
demnach wären es auch HID Geräte.

HID bedeutet in erster Linie nichts anderes, als dass sich kein weiterer 
Treiber installieren muss, um das Gerät korrekt zu erkennen / bedienen. 
Sobald du also HID Geräte angeschlossen hast, sollten sie ohne Probleme 
funktionieren.

Wie ein USB Gerät sich am Rechner anmeldet hängt jedoch ausschließlich 
vom Geräte internen Deskriptor ab, der dem Host (PC) erst sagt, mit was 
er es da zu tun hat.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren