我编写了代码以显示所连接的USB设备的描述(名称)。一旦移除设备,则需要刷新ManagementObject并必须显示所连接的设备描述。

这是我的代码,

ManagementObjectSearcher searcher =
new ManagementObjectSearcher("SELECT * FROM Win32_USBControllerDevice");
foreach (ManagementObject mo in searcher.Get())
{
    string str1 = mo["CurrentRefreshRate"].ToString();
    Console.WriteLine(str1);
    string dependent = mo["Dependent"].ToString();
    string deviceId = dependent.Split('=')[1];
    deviceId = deviceId.Replace('\"', '\'');
    ManagementObjectSearcher searcher2 =
    new ManagementObjectSearcher("SELECT * FROM Win32_PnPEntity Where DeviceID = " + deviceId);
    foreach (ManagementObject mo2 in searcher2.Get())
    {
        HardwareDetails Detail = new HardwareDetails();
        Detail.Description = mo2["Description"].ToString();
        Detail.DeviceId = mo2["DeviceId"].ToString();
        string[] str = Detail.DeviceId.Split('\\');
        string Id = str[1];
        if (Id.Contains('&'))
        {
            string[] separate = Id.Split('&');
            Detail.Vid = separate[0].Contains('_') ? separate[0].Split('_')[1] : separate[0].Split('D')[1];
            Detail.Pid = separate[1].Contains('_') ? separate[1].Split('_')[1] : separate[1].Split('D')[1];
            //Detail.Pid = pid1[1];
        }
        else
        {
            Detail.Vid = "";
            Detail.Pid = "";
        }
        if (list.Count > 0)
        {
            foreach (HardwareDetails h in list)
            {
                if (!(h.Description == Detail.Description))
                {
                    list.Add(Detail);
                    break;
                }
            }
        }
        else
            list.Add(Detail);
    }
}
// remove duplicates, sort alphabetically and convert to array
HardwareDetails[] usbDevices = list.ToArray();
return usbDevices;

最佳答案

你有尝试过吗?

 WqlEventQuery query = new WqlEventQuery(
                "SELECT * FROM Win32_DeviceChangeEvent");

 ManagementEventWatcher watcher = new ManagementEventWatcher(query);
 watcher.EventArrived +=
                new EventArrivedEventHandler(HandleEvent);
 // Start listening for events
            watcher.Start();
    .........
 // Stop listening for events
 watcher.Stop();


并在HandleEvent中从列表中添加或删除设备

希望这可以帮助!

10-05 22:35
查看更多