C# 如何从Win32_PnPEntity获取DEVPKEY_Device_BusReportedDeviceDesc
最简C#实现读取USB串口总线上报设备描述
前置依赖
项目中需添加System.Management程序集引用,再引入对应命名空间:
using System; using System.Management;
实现代码
// 筛选名称带COM端口标识的即插即用设备 var searcher = new ManagementObjectSearcher(@"SELECT * FROM Win32_PnPEntity WHERE Name LIKE '%(COM%'"); // 要查询的属性键 string[] propertyKeys = new[] { "DEVPKEY_Device_BusReportedDeviceDesc" }; foreach (ManagementObject device in searcher.Get()) { try { // 构造方法入参 ManagementBaseObject inParams = device.GetMethodParameters("GetDeviceProperties"); inParams["devicePropertyKeys"] = propertyKeys; // 调用实例方法查询属性 ManagementBaseObject outParams = device.InvokeMethod("GetDeviceProperties", inParams, null); // 解析返回结果 var deviceProperties = (ManagementBaseObject[])outParams["DeviceProperties"]; if (deviceProperties.Length > 0 && deviceProperties[0] != null) { string busDesc = deviceProperties[0]["Data"]?.ToString(); string portName = device["Name"]?.ToString(); Console.WriteLine($"端口:{portName},总线上报描述:{busDesc}"); } } catch (Exception ex) { // 无权限或设备不存在时可根据需求忽略异常 Console.WriteLine($"读取设备属性失败:{ex.Message}"); } }
原报错原因说明
GetDeviceProperties是Win32_PnPEntity单个设备实例的方法,不能直接在ManagementClass类对象上调用- 入参
devicePropertyKeys要求传入string[]类型的数组,之前测试时参数嵌套层级错误导致类型匹配失败
内容的提问来源于stack exchange,提问作者CaptTwigg
相关产品推荐
相关产品推荐

