0

我希望有人可以帮助我解决这个问题。我做了一个应用程序来从智能手机读取一些数据并显示在应用程序中。它在我家很好用,所以我把它带到我朋友家给他看,但它没有用。所以在恐慌之后,我意识到由于连接到新PC而导致地址略有变化,这不是问题,winapi上必须有一个简单的解决方案。

\\?\usb#vid_045e&pid_0040#6&ff454f2&0&3#{a5dcbf10-6530-11d2-901f-00c04fb951ed}\

我只找到了 C++ 的代码,而我的应用程序是 C 语言,所以没用。我还在谷歌上找到了 libusb,但是这并没有像我上面的例子那样返回完整的路径。

有没有像 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)

4

1 回答 1

0

是的,您可以获得计算机上所有设备标识符的列表,但这并不是那么简单,尤其是当您需要针对特定​​类型的设备进行过滤时。

你从SetupDiGetClassDevs. 枚举匹配设备后,使用SetupDiGetDeviceInstanceId获取设备路径,如您的问题中所示。

于 2012-07-22T03:06:49.597 回答