2015-01-07 1 views
0

Я хочу перечислить все подключенные устройства programatically. В целом, я пытаюсь проверить, сколько устройств подключено по адресу Порт USB и порт PS2.API для отображения всех подключенных устройств?

+0

См http://stackoverflow.com/questions/13927475/windows-how-to-enumerate-all-connected-usb-devices-device-path/13928035 # 13928035 для перечисления USB-устройств. – Michael

ответ

0

Вы можете использовать SetupDiEnumDeviceInterfaces и SetupDiGetDeviceInterfaceDetail (http://msdn.microsoft.com/en-us/library/windows/hardware/ff551120%28v=vs.85%29.aspx), чтобы получить информацию о Windows.

Вот пример кода: https://gist.github.com/rakesh-gopal/9ac217aa218e32372eb4

SetupDiEnumDeviceInterfaces(hDevInfo, NULL, &GUID_DEVINTERFACE_USB_DEVICE,dwMemberIdx, DevIntfData); 
SetupDiGetDeviceInterfaceDetail(hDevInfo, &DevIntfData, NULL, 0, &dwSize, NULL); 

Идея заключается в том, чтобы повторно позвонить SetupDiEnumDeviceInterfaces, чтобы получить все подключенные устройства, а затем вызвать SetupDiGetDeviceInterfaceDetail, чтобы получить более подробную информацию о подключенном устройстве.

Вы также можете использовать libusb для получения вывода, подобного lsusb, в unix-подобных системах. Не забудьте скомпилировать флажок -lusb.

Вот код с помощью libusb: https://gist.github.com/rakesh-gopal/12d4094e2b882b44cb1d

#include <stdio.h> 
#include <usb.h> 
main(){ 
    struct usb_bus *bus; 
    struct usb_device *dev; 
    usb_init(); 
    usb_find_busses(); 
    usb_find_devices(); 
    for (bus = usb_busses; bus; bus = bus->next) 
     for (dev = bus->devices; dev; dev = dev->next){ 
      printf("Trying device %s/%s\n", bus->dirname, dev->filename); 
      printf("\tID_VENDOR = 0x%04x\n", dev->descriptor.idVendor); 
      printf("\tID_PRODUCT = 0x%04x\n", dev->descriptor.idProduct); 
     } 
} 
+0

Есть ли какие-либо аналогичные ** API NATIVE **? –

+0

@sonugupta Стандартная спецификация C не предоставляет API для отображения или взаимодействия с USB-устройствами, если это то, что вы хотите. Вы должны использовать библиотеку для работы с USB. BTW, я отредактирую свой ответ, чтобы включить решение для Unix-подобных систем. –