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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.