2010-07-08 47 views
2

我写了一个代码来显示连接的USB设备的描述(名称)。一次我删除了一个设备,然后我需要刷新管理对象并且必须显示连接的设备描述。如何刷新管理对象

这里是我的代码,

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; 

回答

1

你试试这个?

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添加或从列表中删除设备

希望这有助于!

+0

我不能理解如何在我的应用程序中使用我的编码。我将详细解释我。 – Ramya 2010-07-08 06:15:33

+0

你可以添加事件处理程序到Windows设备的变化,提供的代码...您应该创建一个函数HandleEvent的签名EventArrivedEventHandler,并在该功能更新设备列表 – 2010-07-08 06:36:13

+0

亚那thats correct.actually我也使用这样only.But事情是温我从我的电脑中删除任何设备,该列表仍显示删除的设备名称(列表将只显示连接的设备)。这是由于延迟系统刷新time.wilüPLZ建议我如何克服这个问题? – Ramya 2010-07-08 09:01:02