1

我正在尝试在已启用的 PC 中获取媒体设备。我可以使用 WMI 来获取设备列表,但是似乎没有一个属性可以识别设备是否已启用(我指的是设备管理器中的设备状态)。

我目前正在使用此代码来获取运行良好的设备列表。但是,如果用户禁用了该设备,它仍然由该列表返回,我的应用程序尝试使用它,但显然无法使用...

private static ManagementObjectCollection GetMediaDevices()
    {
        ManagementObjectSearcher objSearcher =
            new ManagementObjectSearcher("SELECT HardwareID FROM Win32_PnPSignedDriver Where DeviceClass = 'MEDIA'");
        return objSearcher.Get();
    }

我查看了所有属性 ( SELECT *),但似乎没有一个具有此信息。

有任何想法吗?

4

1 回答 1

0

我得到了一些这样的片段代码。

public static List<DeviceCompactInfo> GetPnPDeviceInfo(string captionLikeCondition)
{
    var selectQuery = "SELECT Caption, Description, Manufacturer, SystemName, DeviceID From Win32_PnPEntity ";
    var query = string.Format("{0} WHERE ConfigManagerErrorCode = 0 and Caption like '{1}' ", selectQuery, captionLikeCondition);
    var searcher = new System.Management.ManagementObjectSearcher(query);
    var pnpList = searcher.Get().Cast<System.Management.ManagementBaseObject>()
        .Select(x => new DeviceCompactInfo
        {
            Name = Convert.ToString(x["Caption"]),
            Description = Convert.ToString(x["Description"]),
            Manufacturer = Convert.ToString(x["Manufacturer"]),
            SystemName = Convert.ToString(x["SystemName"]),
            DeviceID = Convert.ToString(x["DeviceID"]),
        })
        .ToList();

    return pnpList;
}

[System.Diagnostics.DebuggerDisplay("Name:{Name}, Description:{Description}, Manufacturer:{Manufacturer}, SystemName:{SystemName}, DeviceID:{DeviceID}", Name = "DeviceCompactInfo")]
public class DeviceCompactInfo
{
    public string Name
    {
        get;
        set;
    }

    public string Description
    {
        get;
        set;
    }

    public string Manufacturer
    {
        get;
        set;
    }

    public string SystemName
    {
        get;
        set;
    }

    public string DeviceID
    {
        get;
        set;
    }
}

并打电话

GetPnPDeviceInfo("%cam%").Select(x => x.Name).ToList()

或 "%COM%" 到 captionLikeCondition 参数。

如果您启用信息添加到条件ConfigManagerErrorCode = 0 另请参阅https://msdn.microsoft.com/en-us/library/aa394353%28v=vs.85%29.aspx?f=255&MSPPError=-2147217396

于 2017-04-25T02:55:13.953 回答