我想尝试用c#从windows10中的USB设备中读出最后一个已知的父母,它可以在设备管理器->设备属性->详细信息中看到。我在谷歌上搜索了很多,找到了许多解决方案来获取制造商等,但我无法检索到想要的信息。在我看到的微软网站上,Win32Pnp实体类只返回以下内容:https://i.stack.imgur.com/DCAT7.png
有没有其他方法可以读取最后一个已知的父代?
非常感谢??致以最好的问候,
戴夫
发布于 2021-10-17 07:03:18
到今天为止,“最后一个已知的父”属性键是没有文档记录的。它的名称是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);
}
}
https://stackoverflow.com/questions/69599467
复制相似问题