【问题标题】:C# - Get last known parent from USB device property detailsC# - 从 USB 设备属性详细信息中获取最后一个已知的父级
【发布时间】:2021-12-04 12:41:30
【问题描述】:

我想尝试使用 c# 从 Windows 10 中的 USB 设备中读取最后一个已知的父设备,这在设备管理器 -> 设备属性 -> 详细信息中可见。我搜索了很多,找到了很多解决方案来获取制造商等,但我无法检索到想要的信息。在我看到的微软网站上,Win32Pnp Entity 类只返回以下内容:https://i.stack.imgur.com/DCAT7.png

还有其他方法可以读取最后一个已知的父母吗?

非常感谢?????????? 最好的问候,

戴夫

【问题讨论】:

    标签: c# winapi device-manager


    【解决方案1】:

    截至今天,“最后已知的父级”属性键未记录在案。它的名字是DEVPKEY_Device_LastKnownParent,它的值是{83DA6326-97A6-4088-9453-A1923F573B29} 10。

    而Win32_PnPEntity 有一个GetDeviceProperties method,您可以使用它的键名来读取任何属性。

    因此,这里有一个示例控制台 C# 代码,它为系统中的所有设备转储它(和友好名称):

    foreach (var mo in new ManagementObjectSearcher(null, "SELECT * FROM Win32_PnPEntity").Get().OfType<ManagementObject>())
    {
        // ask for 2 properties
    
        var args = new object[] { new string[] { "DEVPKEY_Device_FriendlyName", "DEVPKEY_Device_LastKnownParent" }, null };
        // or this works too using the PK's value formatted as string
        //var args = new object[] { new string[] { "DEVPKEY_Device_FriendlyName", "{83DA6326-97A6-4088-9453-A1923F573B29} 10" }, null };
    
        // call Win32_PnPEntity.GetDeviceProperties
        mo.InvokeMethod("GetDeviceProperties", args);
    
        var mbos = (ManagementBaseObject[])args[1]; // one mbo for each device property key
    
        var name = mbos[0].Properties.OfType<PropertyData>().FirstOrDefault(p => p.Name == "Data")?.Value;
        if (name != null)
        {
            Console.WriteLine(name);
    
            var parent = mbos[1].Properties.OfType<PropertyData>().FirstOrDefault(p => p.Name == "Data")?.Value;
            Console.WriteLine(" " + parent);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-15
      • 1970-01-01
      • 2018-03-23
      相关资源
      最近更新 更多