You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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}");
    }
}

原报错原因说明

  1. GetDeviceProperties是Win32_PnPEntity单个设备实例的方法,不能直接在ManagementClass类对象上调用
  2. 入参devicePropertyKeys要求传入string[]类型的数组,之前测试时参数嵌套层级错误导致类型匹配失败

内容的提问来源于stack exchange,提问作者CaptTwigg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 10:00:06