开发者

how to refresh management object

开发者 https://www.devze.com 2023-01-05 22:33 出处:网络
i had written a code to display the description(Name) of connected USB devices.once i removed a device,then i need to refresh the ManagementObject and have to display the connected device description.

i had written a code to display the description(Name) of connected USB devices.once i removed a device,then i need to refresh the ManagementObject and have to display the connected device description.

Here is my Code,

ManagementObjectSearcher searcher =
new ManagementObjectSearcher("SELECT * FROM Win32_USBControllerDev开发者_如何转开发ice");
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;


Did you try this?

 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();

And in the HandleEvent add or remove device from the list

Hope this helps!

0

精彩评论

暂无评论...
验证码 换一张
取 消