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

Posted

技术标签:

【中文标题】启用和禁用播放和录制设备【英文标题】:Enabling and disabling playback and recording devices 【发布时间】:2013-06-05 03:49:13 【问题描述】:

我是 c# 的新手..如果我的问题有点傻,请不要生气..

我需要通过 c# 代码查看禁用的播放和录制设备,并希望根据需要启用或禁用它。 我该如何接近..? 我使用 DirectX.DirectSound API 编写了一个代码,但它仅限于枚举仅启用的设备,我无法看到存在的禁用设备。而且我认为没有任何方法可以禁用或启用这些设备。

非常感谢您的帮助。

如果可能的话,还请建议我如何使用其他 API 来做到这一点。

【问题讨论】:

【参考方案1】:

我意识到这是一个非常古老的线程......但我来到这里试图找出如何列出禁用的音频设备,并且我成功完成了一个名为 AudioEndpointController 的 C++ 项目

只需换行:

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

到:

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

【讨论】:

【参考方案2】:

据我所知,无法以编程方式启用/禁用设备。至于您的问题的第一部分(需要查看禁用的设备),这实际上是可能的,但不能单独使用 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 函数的内容完全相同。

【讨论】:

虽然微软不允许这样做,但不知何故,我设法通过注册表编辑通过后门进入来做到这一点。无论如何感谢您的回复!干杯! @AmitArya,我还想在录制桌面屏幕时录制系统声音。我不知道如何进行环回记录,您是如何管理的。你能告诉我吗? @AmitArya 注册表编辑需要管理员权限吗?有不同的方法吗?

以上是关于启用和禁用播放和录制设备的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Windows 中更改默认播放和录制设备名称?

Nadio - 多声音设备播放和录音问题

如何启用 MPMediaItemArtwork 下一个/上一个按钮?

修改 SpeakHere 以录制设备上播放的音频

设备启用/禁用脚本

iOS 11 屏幕录制禁用视频录制