以编程方式从设备管理器详细信息选项卡检索网络适配器“位置信息”

以编程方式从设备管理器详细信息选项卡检索网络适配器“位置信息”

问题描述:

我需要能够通过Windows设备管理器检索(通过C#编程)的一些信息。具体而言,我指的是“设备属性”对话框的“详细信息”选项卡上的信息。在我的情况下,我需要检索PC上的网络适配器的“位置信息”属性。理想情况下,我宁愿使用通过WMI或类似的API调用来做到这一点,但一直未能找到或弄清楚如何做到这一点。无论如何,如果任何人有任何关于如何使用DevCon或一系列API调用来做到这一点的信息,我将不胜感激任何帮助。我在另一篇文章here(我已在下面复制)中找到了代码示例,但是这并没有给我提供我正在寻找的信息。以编程方式从设备管理器详细信息选项卡检索网络适配器“位置信息”

 private static void test() 
    { 
     ManagementPath path = new ManagementPath(); 
     ManagementClass devs = null; 
     path.Server = "."; 
     path.NamespacePath = @"root\CIMV2"; 
     path.RelativePath = @"Win32_PnPentity"; 


     System.IO.File.Delete(fileName); 

     using (devs = new ManagementClass(new ManagementScope(path), path, new ObjectGetOptions(null, new TimeSpan(0, 0, 0, 2), true))) 
     { 
      ManagementObjectCollection moc = devs.GetInstances(); 
      foreach (ManagementObject mo in moc) 
      { 
       try 
       { 
        PropertyDataCollection devsProperties = mo.Properties; 
        foreach (PropertyData devProperty in devsProperties) 
        { 
         if (devProperty.Type == CimType.DateTime) 
         { 
          if (devProperty.Value != null) 
          { 
           Console.WriteLine("Date {0}", ToDateTime(devProperty.Value.ToString())); 
           System.IO.File.AppendAllText(fileName, "Date " + ToDateTime(devProperty.Value.ToString()) + Environment.NewLine); 
          } 
         } 
         else 
         { 
          Console.WriteLine("Property = {0}\t Value = {1}", devProperty.Name, devProperty.Value); 
          System.IO.File.AppendAllText(fileName, "Property = " + devProperty.Name + "\t Value = " + devProperty.Value + Environment.NewLine); 
         } 
        } 

        if (String.IsNullOrEmpty(mo["DeviceID"].ToString())) 
        { 
         System.IO.File.AppendAllText(fileName, "Device ID was NULL" + Environment.NewLine); 
         Console.WriteLine("****** Device ID was NULL ******"); 
         continue; 
        } 

        int count = 0; 
        RelatedObjectQuery relatedQuery; 

        try 
        { 
         relatedQuery = new RelatedObjectQuery("associators of {Win32_PnPEntity.DeviceID='" + mo["DeviceID"] + "'}"); 
         ManagementObjectSearcher searcher = new ManagementObjectSearcher(new ManagementScope(path), relatedQuery); 
         foreach (ManagementObject mob in searcher.Get()) 
         { 
          System.IO.File.AppendAllText(fileName, "--------------------------->>>>>>" + Environment.NewLine); 
          Console.WriteLine("--------------------------->>>>>>"); 
          System.IO.File.AppendAllText(fileName, mob["Description"].ToString() + Environment.NewLine); 
          Console.WriteLine(mob["Description"]); 
          ++count; 
         } 
        } 
        catch (Exception fEx) 
        { 
         string temp = fEx.Message; 
         continue; 
        } 

        System.IO.File.AppendAllText(fileName, "----------------------" + Environment.NewLine); 
        Console.WriteLine("----------------------"); 
       } 
       catch (Exception fEx) 
       { 
        string temp = fEx.Message; 
       } 
      } 

我想出了自己!我用了答案贴here,只是之后在那里,他下面的调用通过添加一行代码稍加修改它:

string desc = GetDevicePropertyString(pNewDevInfoSet, devInfoData, SetupDiGetDeviceRegistryPropertyEnum.SPDRP_DEVICEDESC); 

我增加了以下内容:

string locationInformation = GetDevicePropertyString(pNewDevInfoSet, devInfoData, SetupDiGetDeviceRegistryPropertyEnum.SPDRP_LOCATION_INFORMATION); 

非常感谢给原始人(@ domskey)发布并回复该帖子。不知道他是否写了所有的代码。有相当多的类支持SetupAPI.dll调用。为我节省了大量的时间!