WINAPI USB DEVICE LIST C LIBUSB не очень хорошо
Я надеюсь, что кто-то может помочь мне с этим вопросом. Я сделал приложение для чтения некоторых данных со смартфона и отображения в приложении. У меня дома все работало нормально, поэтому я отнес его домой к другу, чтобы показать ему, и это не сработало. Так что после паники я понял, что адрес немного изменился из-за подключения к новому ПК, а не проблема, должно быть простое решение для winapi.
\\?\usb#vid_045e&pid_0040#6&ff454f2&0&3#{a5dcbf10-6530-11d2-901f-00c04fb951ed}\
Я нашел только код для C++, и мое приложение находится на C, так что это бесполезно. Я также нашел libusb в Google, однако это не возвращает полные пути, как в моем примере выше.
Есть ли такое простое исправление, как поиск по GUID? Надеюсь, вы можете помочь.
BR
Это была LIBUSB, которую я использовал
#include <stdio.h>
#include <sys/types.h>
#include <windows.h>
#include <libusb.h>
static void print_devs(libusb_device **devs)
{
libusb_device *dev;
int i = 0;
while ((dev = devs[i++]) != NULL) {
struct libusb_device_descriptor desc;
int r = libusb_get_device_descriptor(dev, &desc);
if (r < 0) {
fprintf(stderr, "failed to get device descriptor");
return;
}
printf("%04x:%04x (bus %d, device %d)\n",
desc.idVendor, desc.idProduct,
libusb_get_bus_number(dev), libusb_get_device_address(dev));
}
}
int main(void)
{
libusb_device **devs;
int r;
ssize_t cnt;
r = libusb_init(NULL);
if (r < 0)
return r;
cnt = libusb_get_device_list(NULL, &devs);
if (cnt < 0)
return (int) cnt;
print_devs(devs);
libusb_free_device_list(devs, 1);
libusb_exit(NULL);
system("pause");
return 0;
}
Это просто возвращает к примеру
1033:0194 (автобус 1, устройство 255)
1 ответ
Да, вы можете получить список всех идентификаторов устройств на вашем компьютере, но на самом деле все не так просто, особенно если вам нужно отфильтровать его для определенного типа устройств.
Вы начинаете с SetupDiGetClassDevs
, После перечисления соответствующих устройств используйте SetupDiGetDeviceInstanceId
чтобы получить путь к устройству, как показано в вашем вопросе.