C# - 从 USB 设备 属性 详细信息中获取最后已知的 parent
C# - Get last known parent from USB device property details
我想尝试使用 c# 从 windows10 中的 USB 设备读取最后一个已知的 parent,这在设备管理器 -> 设备属性 -> 详细信息中可见。我在谷歌上搜索了很多,找到了很多获取制造商等的解决方案,但我无法检索到想要的信息。在我看到的 Microsoft 网站上,Win32Pnp 实体 class 只有 returns 以下:https://i.stack.imgur.com/DCAT7.png
有没有其他方法可以读取最后已知的 parent?
非常感谢
最好的问候,
戴夫
“最后为人所知的 parent”属性 密钥截至今日尚未记录。它的名称是 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);
}
}
我想尝试使用 c# 从 windows10 中的 USB 设备读取最后一个已知的 parent,这在设备管理器 -> 设备属性 -> 详细信息中可见。我在谷歌上搜索了很多,找到了很多获取制造商等的解决方案,但我无法检索到想要的信息。在我看到的 Microsoft 网站上,Win32Pnp 实体 class 只有 returns 以下:https://i.stack.imgur.com/DCAT7.png
有没有其他方法可以读取最后已知的 parent?
非常感谢 最好的问候,
戴夫
“最后为人所知的 parent”属性 密钥截至今日尚未记录。它的名称是 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);
}
}