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

Gast #4336379
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
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
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
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
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

Eine eigene Frage? Dieser Thread ist über 11 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.