2012-10-24 81 views
7

在我的Windows 7 PC上,我有一組揚聲器,一些無線耳機和一個USB網絡攝像頭。這意味着我有兩個可能的音頻輸出設備和兩個可能的音頻輸入設備。以編程方式在Windows 7上切換音頻設備

我發現自己不得不頻繁地在它們之間切換。目前這是一個手動過程:右鍵單擊揚聲器圖標,選擇「播放設備」或「錄製設備」中的一個,在列表中選擇正確的設備(此處也有一些「已死」的設備)然後點擊「設置默認值」。

我環顧四周,所有我能找到的是人腳本SendKeys自動執行此操作。

這很糟糕。

反正有編程方式切換音頻輸入/輸出設備,以便我可以編寫一個簡單的托盤應用程序/熱鍵應用程序,使這更容易?

+0

http://superuser.com/questions/201973/easy-way-to-switch-default-sound-output-device它們鏈接到Codeplex上的SoundSwitch,似乎工作。我沒有仔細查看代碼,以便告訴你哪些部分需要重現。 – TankorSmash

回答

10

據稱無證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獲得。

+0

這是SoundSwitch(http://soundswitch.codeplex.com/)使用的。 –

+0

@RogerLipscombe你確定嗎? - 在查看源代碼時,我無法在任何地方找到單詞「Policy」或「SetDefaultEndpoint」。 - 這讓我覺得它正在做一些不同的事情。 – BrainSlugs83

相關問題