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

10

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

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

我找了一下,发现所有的都是使用脚本SendKeys来自动化这个过程。

那真是太糟糕了。

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


他们链接到Codeplex上的SoundSwitch,似乎可以工作。我还没有仔细查看代码,无法告诉您需要复制哪些部分。 - TankorSmash
2个回答

16
据称未经文件记录的COM接口IPolicyConfig(感谢@EreTIk)可以实现这一点。 这是一个示例实现。

据称未经文件记录的COM接口IPolicyConfig (感谢@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。


@RogerLipscombe 你确定吗?-- 在查看源代码后,我找不到任何“Policy”或“SetDefaultEndpoint”一词。-- 这让我觉得它正在做一些不同的事情。 - BrainSlugs83

3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接