启用和禁用回放和记录设备

本文关键字:记录 启用 回放 | 更新日期: 2023-09-27 18:17:02

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

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

我将非常感谢你的帮助。

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

启用和禁用回放和记录设备

我意识到这是一个非常非常老的线程…但是我登陆这里试图找出如何列出禁用的音频设备,我成功地使用了一个名为AudioEndpointController的c++项目

只需改变行:

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

:

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

据我所知,不可能以编程方式启用/禁用设备。至于你问题的第一部分(需要看到禁用的设备),这实际上是可能的,但不是单独使用c#,你必须通过使用c++/CLI或在c#中使用显式PInvoke来使用WASAPI。你正在寻找IMMDeviceEnumerator:: enumaudioendpoint,它接受一个标志,指示你是否想看到禁用/未插电等设备。见http://msdn.microsoft.com/en-us/library/windows/desktop/dd371400%28v=vs.85%29.aspx。在这个例子中,WASAPI的IMMDevice接口的好处是它暴露了一个GUID,它对应于设备的DirectSound id,所以你实际上可以使用WASAPI来检测哪些设备是活动的/非活动的等,并使用DirectSound做所有其他的事情。为此,您需要使用IMMDevice::OpenPropertyStore,并查询PKEY_AudioEndpoint_GUID属性。这与传递给DirectSound的DSEnumCallback函数的内容完全相同。