Windows下所有类别的过滤器和硬件设备列表

问题描述

当我运行时(在 C++ 中) CoCreateInstance (CLSID_SystemDeviceEnum [...]) 然后 CreateClassEnumerator (CLSID_ActiveMovieCategories [...]), 我得到 28 个类别。但我知道还有更多类别,其中一些已安装在我的系统上,例如:

KSCATEGORY_BDA_NETWORK_PROVIDER,"BDA network provider"    {71985F4B-1CA1-11D3-9CC8-00C04F7971E0}
CLSID_VideoEffects1Category,"Video effect (1 input)"  {CC7BFB42-F175-11D1-A392-00E0291F3959}
CLSID_MediaEncoderCategory,"EncAPI encoder"          {7D22E920-5CA9-4787-8C2B-A6779BD11781}

我可以列出的成员包括 CreateClassEnumerator (CLSID_VideoEffects1Category [...]). 有没有办法列出系统上所有类别的过滤器和硬件设备,包括那些没有映射到任何 DirectShow 类别的视频效果类别?

解决方法

您可以枚举类别,如 DirectShow Filter Meta-Category 部分所述:

此元类别包含过滤器类别列表。如果过滤器类别未出现在此列表中,过滤器映射器将忽略该类别,这意味着该过滤器不可用于 Intelligent Connect。

要枚举过滤器类别列表,请使用值 ICreateDevEnum::CreateClassEnumerator 调用 CLSID_ActiveMovieCategories。此方法返回的名字对象支持以下属性。

这也枚举了第三方创建的类别。

answer to your previous questionGraphStudioNext 源代码中所述:

enter image description here

通常不推荐这样做,但您也可以从注册表中的 HKCR\CLSID\<GUID of CLSID_ActiveMovieCategories>\Instance 键下读取类别。