Winapi DirectShow音频捕获设备的注册表位置

Winapi DirectShow音频捕获设备的注册表位置,winapi,audio,registry,directshow,Winapi,Audio,Registry,Directshow,我正在从我的应用程序执行VLC,以从DirectShow音频捕获设备捕获和编码。VLC通过标准输出将编码数据发送到我的应用程序。我需要一种方法来枚举DirectShow音频捕获设备。不幸的是,VLC似乎没有为此提供任何非GUI方式 在寻找获取设备名称列表的简单方法时,我偶然发现了以下注册表项,其中子项以音频捕获设备命名: HKEY\u CURRENT\u USER\Software\Microsoft\ActiveMovie\devenum 64位\{33D9A762-90C8-11D0-BD

我正在从我的应用程序执行VLC,以从DirectShow音频捕获设备捕获和编码。VLC通过标准输出将编码数据发送到我的应用程序。我需要一种方法来枚举DirectShow音频捕获设备。不幸的是,VLC似乎没有为此提供任何非GUI方式

在寻找获取设备名称列表的简单方法时,我偶然发现了以下注册表项,其中子项以音频捕获设备命名:

  • HKEY\u CURRENT\u USER\Software\Microsoft\ActiveMovie\devenum 64位\{33D9A762-90C8-11D0-BD43-00A0C911CE86}
  • HKEY_CURRENT_USER\Software\Microsoft\ActiveMovie\devenum\{33D9A762-90C8-11D0-BD43-00A0C911CE86}
对于其他计算机和DirectX的最新版本,是否保证此注册表位置位于同一位置?除了实现大量DirectX代码外,还有其他方法可以获取DirectShow音频设备名称列表吗?(可能通过诊断工具的某些输出。)

DirectShow(Windows核心API,不再是DirectX的一部分)设备的列表由枚举器根据请求提供,列出特定类别(在本例中为音频输入设备,
CLSID_AudioInputDeviceCategory
)。这是有问题的
GUID
,注册表不一定包含所有设备的条目。相反,枚举器通过API以编程方式提供设备列表,将不同类型的可用设备组合在一起

无法以明确定义/记录的方式影响枚举顺序

枚举设备的最简单方法是Windows SDK GraphEdt.exe工具,或其更好的替代选项GraphStudio/
Ctrl+F
然后选择类别:

您还可以使用命令行工具()枚举设备及其功能,其中“友好名称”行按枚举顺序列出设备:

Moniker Display Name: @device:cm:{33D9A762-90C8-11D0-BD43-00A0C911CE86}\Stereo Mix (Realtek High Defini
Friendly Name: Stereo Mix (Realtek High Defini
  Pin: Capture
    Capability Count: 23
    Capability 0:
    AM_MEDIA_TYPE:
      .bFixedSizeSamples: 1
      .bTemporalCompression: 0
      .lSampleSize: 4
      .cbFormat: 18
    WAVEFORMATEX:
      .wFormatTag: 1
      .nChannels: 2
      .nSamplesPerSec: 44100
      .nAvgBytesPerSec: 176400
      .nBlockAlign: 4
      .wBitsPerSample: 16
      .cbSize: 0

为了影响顺序,比如将一个设备放在列表顶部,我只能想到API挂钩,这是可能的,但由于标准系统行为的改变,不建议广泛使用。

1
简单的枚举方法是通过API
2
进行一个小的更正-DirectShow不是DirectX
3
枚举不仅仅是注册表项:有提供设备名字的枚举器以编程方式,不只是从注册表项代码“4”/代码>一个不可知工具,寻找“友好名称”行(从C++中逐步增加代码)。您还可以使用Windows SDK
GraphEdt.exe进行交互式枚举。@RomanR.,谢谢您提供的有用信息!请考虑把它作为答案。我不确定你是否会对这方面的知识感到满意,或者你仍然会寻找在注册表上调整它的方法。