2010-09-10 196 views
5

我试图做一个功能,检测是否USB设备连接给定的设备PID和VID。我希望它看起来像这样,我只是不知道如何在C#中做到这一点。USB设备连接

public bool IsUsbDeviceConnected(string pid, string vid) 
{ 
    //Code here 
} 
+2

请编辑您的问题;增加以下几点可能会给你更好的答案:1.你到目前为止尝试过什么? 2.你得到了什么结果? 3.这与你所期望的结果有何不同? – Piskvor 2010-09-10 15:07:24

回答

5
//using System.Management 
public bool IsUsbDeviceConnected(string pid, string vid) 
{ 
    using (var searcher = 
    new ManagementObjectSearcher(@"Select * From Win32_USBControllerDevice")) 
    { 
    using (var collection = searcher.Get()) 
    { 
     foreach (var device in collection) 
     { 
     var usbDevice = Convert.ToString(device); 

     if (usbDevice.Contains(pid) && usbDevice.Contains(vid)) 
      return true; 
     } 
    } 
    } 
    return false; 
} 
+0

你能帮我解决[this](http://stackoverflow.com/q/7314257/75500)相关的问题吗? – Shimmy 2011-10-04 12:43:36

3

可能类似于

//import the System.Management namespace at the top in your "using" statement. Then in a method, or on a button click: 

ManagementObjectCollection collection; 
using (ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive WHERE InterfaceType='USB'")) 
    collection = searcher.Get(); 
foreach (ManagementObject currentObject in collection) 
{ 
    ManagementObject theSerialNumberObjectQuery = new ManagementObject("Win32_PhysicalMedia.Tag='" + currentObject["DeviceID"] + "'"); 
    MessageBox.Show(theSerialNumberObjectQuery["SerialNumber"].ToString()); 
} 
collection.Dispose(); 

使用WMI

+0

我没有序列号,只有在usb中嵌套的供应商ID和产品ID。此外,该WMI调用查找Win32_DiskDrives,而不是所有的USB设备。 – Robert 2010-09-10 17:03:41

相关问题