检查特定的USB设备是否可用

时间:2014-01-28 10:40:18

标签: windows winapi usb libusb

我需要查看具有特殊供应商/产品ID的USB设备是否可用(我只检查它是否存在,无需访问)。当使用libusb-win32时,只能为安装了libusb驱动程序/过滤器驱动程序的设备执行此操作,这在我的情况下不起作用。

那么......有可能枚举所有可用的USB设备并获得他们的VID / PID吗?任何可用的示例代码?

谢谢!

2 个答案:

答案 0 :(得分:1)

是的,可以通过WMI查询对其进行存档,例如获取插入的USB笔式驱动器的SN(如果有的话,有些则没有)。

Check WMI Win32_PNPEntity class或Win32_USBHub,Win32_USBControllerDevice类。

修改

要枚举所有设备,请删除WHERE子句:

using System;
using System.Management;
using System.Windows.Forms;

namespace WMISample
{
    public class MyWMIQuery
    {
        public static void Main()
        {
            try
            {
                ManagementObjectSearcher searcher = 
                    new ManagementObjectSearcher("root\\CIMV2", 
                    "SELECT * FROM Win32_PnPEntity WHERE DeviceID = 'USB\\VID_8087&PID_0024\\5&38CA7A24&0&1'"); 

                foreach (ManagementObject queryObj in searcher.Get())
                {
                    Console.WriteLine("-----------------------------------");
                    Console.WriteLine("Win32_PnPEntity instance");
                    Console.WriteLine("-----------------------------------");
                    Console.WriteLine("DeviceID: {0}", queryObj["DeviceID"]);
                }
            }
            catch (ManagementException e)
            {
                MessageBox.Show("An error occurred while querying for WMI data: " + e.Message);
            }
        }
    }
}

答案 1 :(得分:0)

您不需要安装驱动程序/过滤器来枚举设备或找到具有特定供应商/产品ID的设备。

libusb-win32归入libusbx,被libusb重新吸收。

如果您检查libusb.info,那么您将找到适用于Linux,MacOSX和Windows的官方libusb的最新端口。 (无需使用单独的libusb-win32)。

发行版附带一个名为listdevs的示例,它按供应商/产品ID列出所有连接的设备(过滤器或否)。我检查了Linux(Ubuntu 12.10)和Win32(Windows 7 Pro),两者的工作方式相同。