10

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

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

我环顾四周,我能找到的只是人们编写脚本SendKeys来自动执行此操作。

太糟糕了。

无论如何以编程方式切换音频输入/输出设备,以便我可以编写一个简单的托盘应用程序/热键应用程序来简化此操作?

4

2 回答 2

16

据称未记录的 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;
}

需要将一串设备 ID 传递给此函数。设备 ID 示例

{0.0.1.00000000}.{d915c7bb-d5d7-4c92-80d9-1a0ee5d954f1}

这个设备id可以通过音频设备枚举获得。

于 2013-11-28T16:07:10.667 回答
3

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

于 2012-10-24T17:49:35.823 回答