以编程方式在Windows 7上切换音频设备

时间:2012-10-24 17:19:23

标签: winapi audio windows-7

在我的Windows 7 PC上,我有一套扬声器,一些无线耳机和一个USB网络摄像头。这意味着我有两个可能的音频输出设备和两个可能的音频输入设备。

我发现自己不得不经常在它们之间切换。目前这是一个手动过程:右键单击扬声器图标,选择“播放设备”或“录制设备”之一,在列表中选择正确的设备(并且那里也有一些“死”设备)然后点击“设置默认值”。

我环顾四周,所有我能找到的人都是脚本SendKeys来自动执行此操作。

太糟糕了。

有没有以编程方式切换音频输入/输出设备,以便我可以编写一个简单的托盘应用程序/热键应用程序,以使这更容易?

2 个答案:

答案 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)

如果您正在考虑以编程方式更改默认设备,那么这在设计上是不可能的。