2012-10-24 16 views
7

Sul mio PC Windows 7, ho un set di altoparlanti, alcune cuffie wireless e una web cam USB. Ciò significa che ho due possibili dispositivi di uscita audio e 2 possibili dispositivi di input audio.Commuta audio dispositivi su Windows 7

Mi trovo a dover passare tra loro abbastanza frequentemente. Al momento si tratta di un processo manuale: fai clic con il tasto destro sull'icona dell'altoparlante, scegli uno dei "Dispositivi di riproduzione" o "Dispositivi di registrazione", scegli il dispositivo corretto nell'elenco (e anche lì ci sono alcuni "guasti") e quindi premere "Imposta predefinito".

Mi sono guardato intorno e tutto quello che posso trovare sono le persone che eseguono lo scripting SendKeys per automatizzarlo.

Che schifo.

Esiste comunque la possibilità di passare a livello di programmazione dei dispositivi di input/output audio, in modo che sia possibile scrivere una semplice app per app/hotkey per semplificare la procedura?

+0

http://superuser.com/questions/201973/easy-way-to-switch-default-sound-output-device Si collegano a SoundSwitch su Codeplex che sembra funzionare. Non ho esaminato abbastanza il codice per dirti quali parti devi riprodurre. – TankorSmash

risposta

10

Presumibilmente non documentata COM-interfaccia IPolicyConfig (complimenti a @Author EreTIk) permette di farlo.

Questa è un'implementazione di esempio.

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; 
} 

Una stringa di ID dispositivo deve essere passata a questa funzione. Un esempio di un dispositivo id

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

Questo dispositivo id può essere ottenuta tramite audio device enumeration.

+0

Questo è ciò che utilizza SoundSwitch (http://soundswitch.codeplex.com/). –

+0

@RogerLipscombe sei sicuro? - Osservando il codice sorgente non riesco a trovare la parola "Politica" o "SetDefaultEndpoint" da nessuna parte. - Il che mi fa pensare che stia facendo qualcosa di diverso. – BrainSlugs83