用于列出所有连接设备的API?

时间:2015-01-07 12:41:12

标签: c winapi hardware

我想列出所有连接的设备以编程方式。基本上,我要做的是检查 USB端口和PS2端口连接的设备数量。 < / p>

1 个答案:

答案 0 :(得分: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在类似unix的系统上获得类似于lsusb的输出。 请记住使用-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);
        }
}