Я хочу перечислить все подключенные устройства programatically. В целом, я пытаюсь проверить, сколько устройств подключено по адресу Порт USB и порт PS2.API для отображения всех подключенных устройств?
ответ
Вы можете использовать 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);
}
}
Есть ли какие-либо аналогичные ** API NATIVE **? –
@sonugupta Стандартная спецификация C не предоставляет API для отображения или взаимодействия с USB-устройствами, если это то, что вы хотите. Вы должны использовать библиотеку для работы с USB. BTW, я отредактирую свой ответ, чтобы включить решение для Unix-подобных систем. –
См http://stackoverflow.com/questions/13927475/windows-how-to-enumerate-all-connected-usb-devices-device-path/13928035 # 13928035 для перечисления USB-устройств. – Michael