如何在 C# 中获取启用(媒体)设备的列表

Posted

技术标签:

【中文标题】如何在 C# 中获取启用(媒体)设备的列表【英文标题】:How to get list of ENABLED (media) devices in C# 【发布时间】:2015-09-08 01:30:54 【问题描述】:

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

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

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

我查看了所有属性 (SELECT *),但似乎都没有这些信息。

有什么想法吗?

【问题讨论】:

【参考方案1】:

我得到了一些这样的 sn-p 代码。

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%" 到标题LikeCondition 参数。

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

【讨论】:

以上是关于如何在 C# 中获取启用(媒体)设备的列表的主要内容,如果未能解决你的问题,请参考以下文章

C#使用FFMPEG推流,并且获取流保存在本地,随时取媒体进行播放!

Iphone - 如何启用应用程序访问设备上的媒体? - ALAssetsLibraryErrorDomain Code=-3312 "全局拒绝访问"

获取音频设备列表并使用 c# 选择一个

如何在 C# 中使用 xamarin 在 android 上获取 PSK? [关闭]

C# - 获取所有 USB 打印机的列表

如何在一定距离内发现设备