在我的Windows 7 PC上,我有一套扬声器,一些无线耳机和一个USB网络摄像头。这意味着我有两个可能的音频输出设备和两个可能的音频输入设备。
我发现自己不得不经常在它们之间切换。目前这是一个手动过程:右键单击扬声器图标,选择“播放设备”或“录制设备”之一,在列表中选择正确的设备(并且那里也有一些“死”设备)然后点击“设置默认值”。
我环顾四周,所有我能找到的人都是脚本SendKeys
来自动执行此操作。
太糟糕了。
有没有以编程方式切换音频输入/输出设备,以便我可以编写一个简单的托盘应用程序/热键应用程序,以使这更容易?
答案 0 :(得分:11)
据称未记录的COM接口IPolicyConfig(对@author EreTIk的称赞)允许这样做。
这是一个示例实现。
HRESULT SetDefaultAudioPlaybackDevice(LPCWSTR devID)
{
IPolicyConfigVista *pPolicyConfig;
ERole reserved = eConsole;
HRESULT hr = CoCreateInstance(
__uuidof(CPolicyConfigVistaClient),
NULL,
CLSCTX_ALL,
__uuidof(IPolicyConfigVista),
(LPVOID *)&pPolicyConfig);
if (SUCCEEDED(hr))
{
hr = pPolicyConfig->SetDefaultEndpoint(devID, reserved);
pPolicyConfig->Release();
}
return hr;
}
需要将一串Device ID传递给此函数。设备ID
的示例{0.0.1.00000000}.{d915c7bb-d5d7-4c92-80d9-1a0ee5d954f1}
此设备ID可以通过audio device enumeration获得。
答案 1 :(得分:4)
如果您正在考虑以编程方式更改默认设备,那么这在设计上是不可能的。