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.
also verschiedene Geräteklassen. Das fällt mir spontan nur WMI ein http://blogs.technet.com/b/heyscriptingguy/archive/2005/03/15/how-can-i-determine-which-usb-devices-are-connected-to-a-computer.aspx
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 MS gibts das USBView Tool samt Quellcode. Macht genau das.
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.
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
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.
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.
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.