启用和禁用播放和录制设备

时间:2013-06-05 03:49:14

标签: c# audio playback recording directsound

我是c#的新手..请不要因我的问题而烦恼,如果它有点傻话......

我需要通过c#代码查看禁用的播放和录制设备,并希望根据需要启用或禁用它。 我该怎么办? 我使用DirectX.DirectSound API创建了一个代码,但它仅限于枚举仅启用的设备,但我无法看到已禁用的设备。我认为没有任何禁用或启用设备的方法。

我非常感谢你的帮助。

如果可能的话,还请建议我如何使用其他API。

2 个答案:

答案 0 :(得分:1)

我意识到这是一个非常老的线程...但是我在这里试图找出如何列出禁用的音频设备,并且我成功地使用了一个名为AudioEndpointController

的C ++项目

只需更改行:

PlaybackDevice = pEnum->EnumAudioEndpoints(eRender, DEVICE_STATE_ACTIVE, &pDevices);

为:

PlaybackDevice = pEnum->EnumAudioEndpoints(eRender, DEVICE_STATE_DISABLED, &pDevices);

答案 1 :(得分:0)

据我所知,无法以编程方式启用/禁用设备。至于问题的第一部分(需要查看已禁用的设备),这实际上是可行的,但不能单独使用c#,您必须使用C ++ / CLI或在C#中使用显式PInvoke来使用WASAPI。您正在寻找IMMDeviceEnumerator :: EnumAudioEndpoints,它带有一个标志,指示您是否要查看已禁用/未插入等设备。见http://msdn.microsoft.com/en-us/library/windows/desktop/dd371400%28v=vs.85%29.aspx。在这种情况下,关于WASAPI的IMMDevice接口的好处是它暴露了与设备的DirectSound id相对应的GUID,因此您实际上可以使用WASAPI来检测哪些设备处于活动/非活动状态等,并使用DirectSound执行所有其他操作。为此,您将需要使用IMMDevice :: OpenPropertyStore,并查询PKEY_AudioEndpoint_GUID属性。这与传入DirectSound的DSEnumCallback函数完全相同。

相关问题