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


von BlackShadow (Gast)


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.

von Peter II (Gast)


Lesenswert?

was sind das für USB-Geräte?

von BlackShadow (Gast)


Lesenswert?

Im Moment vor allem Maus, Tastatur und USB-Stick

von Peter II (Gast)


Lesenswert?


von BlackShadow (Gast)


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

von Christian R. (supachris)


Lesenswert?

Von MS gibts das USBView Tool samt Quellcode. Macht genau das.

von c-hater (Gast)


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.

von mec (Gast)


Lesenswert?

Damit sollte es auch unter Windows gehen und wäre damit 
Plattformunabhängig.

http://www.libusb.org/

Und ein kleines Beispiel für dein Problem:

https://git.libusb.org/?p=libusb.git;a=blob;f=examples/listdevs.c;h=6ab891725a36424a7f59d5a8ff2c20a7deaec858;hb=7634714aa696175b08016b6f2185a75a2f55a113;js=1

von mec (Gast)


Lesenswert?

Ups, sie sind wohl umgezogen zu http://libusb.info/

von Christian R. (supachris)


Lesenswert?

Um USB Geräte zu finden braucht man doch keinen Treiber, also der 
Hinweis auf LibUSB ist hier ziemlich irreführend. Unter Windows braucht 
man wie schon geschrieben das SetupApi.

von Thomas M. (thomasmaintz)


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.

von Peter II (Gast)


Lesenswert?

Thomas M. schrieb:
> Zeigt dir direkt alle angeschlossenen Geräte an.

sicher? So wie ich das lese sind HID-Gräte. Er will auch  USB-Stick 
angezeigt bekommen.

von Thomas M. (thomasmaintz)


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.

von Christian R. (supachris)


Lesenswert?

Thomas M. schrieb:
> HID bedeutet in erster Linie nichts anderes, als dass sich kein weiterer
> Treiber installieren muss, um das Gerät korrekt zu erkennen / bedienen.

Nee, HID ist eine Geräteklasse mit genau definierten Descriptoren und 
Verhalten. Dass die meisten OS dafür schon Treiber mitbringen ist was 
ganz anderes.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.