如何列举你系统已经安装的设备(视频压缩设备,视频捕获设备...)!
系统设备调查器提供了一个统一的方法去列举出系统中用户所有按类型注册的过滤器。系统设备调
查器通过创建一个指定类型调查器(比如音频捕获类型或者视频压缩类型) (enumerator)来工作,
这个调查器会返回系统中所有该类设备的唯一名称。
按一下步骤操作去使用设备调查器:
1. 调用 CoCreateInstance 创建系统设备调查器。
类标识(CLSID)参数是 CLSID_SystemDeviceEnum.
2. 调用 ICreateDevEnum::CreateClassEnumerator 创建你想要的指定类型调查器,在类标识
(CLSID)参数中指定你想要列举的设备类型。调用该方法后,将返回一个 IenumMoniker 指针。如果
指定类型设备为空或者不存在该设备,将返回 S_FALSE。同时 IenumMoniker 指针为 NULL 并且会
造成一个异常。所有,在调用该方法的时候,要检查其返回值是否为 S_OK,而不要使用
SUCCEEDED 宏去检测。
3. 使用 IEnumMoniker::Next 方法去列举出每个设备名称。该方法将返回一个 Imoniker 接口指
针。当 Next 方法列举出最后一个设备名称后,它将返回 S_FALSE,为 S_OK 表示还有设备没有列
举完。
4. 调用 IMoniker::BindToStorage 方法去获得设备的名称。
5. 调用 IMoniker::BindToObject 去创建并初始化 DirectShow 过滤器去管理选择的设备。调用
IFilterGraph::AddFilter 把创建的过滤器加到过滤器图表中。
下图显示处理流程
下面代码演示了列举出用户系统上安装的视频压缩设备。为了方便阅读,该例只加了最基本的错误
检查。
// 创建系统设备调查器