2012-10-24 21 views
7

पर प्रोग्रामेटिक रूप से ऑडियो डिवाइस स्विच करें मेरे विंडोज 7 पीसी पर, मुझे स्पीकर, कुछ वायरलेस हेडफ़ोन और एक यूएसबी वेब कैमरा मिला है। इसका मतलब है कि मेरे पास दो संभावित ऑडियो आउटपुट डिवाइस और 2 संभावित ऑडियो इनपुट डिवाइस हैं।विंडोज 7

मुझे लगता है कि मुझे अपने बीच काफी बार स्विच करना पड़ता है। फिलहाल यह एक मैन्युअल प्रक्रिया है: स्पीकर आइकन पर राइट-क्लिक करें, "प्लेबैक डिवाइस" या "रिकॉर्डिंग डिवाइस" में से कोई एक चुनें, सूची में सही डिवाइस चुनें (और वहां कुछ "मृत" भी हैं) और फिर "डिफ़ॉल्ट सेट करें" दबाएं।

मैंने चारों ओर देखा है, और मैं इसे ढूंढने के लिए लोगों को SendKeys स्क्रिप्टिंग कर रहा हूं।

वह बेकार है।

क्या प्रोग्राम इनपुट रूप से ऑडियो इनपुट/आउटपुट डिवाइस स्विच करने के लिए वैसे भी है, ताकि मैं इसे आसान बनाने के लिए एक साधारण ट्रे ऐप/हॉटकी ऐप लिख सकूं?

+0

http://superuser.com/questions/201973/easy-way-to-switch-default-sound-output-device वे कोडप्लेक्स पर साउंडस्विच से लिंक करते हैं जो काम करता है। मैंने आपको यह बताने के लिए पर्याप्त कोड नहीं देखा है कि आपको किन भागों को पुन: उत्पन्न करने की आवश्यकता है। – TankorSmash

उत्तर

10

कथित तौर पर गैर-दस्तावेजी COM इंटरफ़ेस IPolicyConfig (प्रशंसा EreTIk @author करने के लिए) ऐसा करने की अनुमति देता है।

यह एक नमूना कार्यान्वयन है।

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

डिवाइस आईडी की एक स्ट्रिंग को इस फ़ंक्शन में पास करने की आवश्यकता है। एक उपकरण आईडी

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

इस डिवाइस आईडी का एक उदाहरण audio device enumeration के माध्यम से प्राप्त किया जा सकता।

+0

यह है कि SoundSwitch (http://soundswitch.codeplex.com/) का उपयोग करता है। –

+0

@RogerLipscombe क्या आप निश्चित हैं? - स्रोत कोड को देखने पर मुझे कहीं भी "नीति" या "SetDefaultEndpoint" शब्द नहीं मिल रहा है। - जो मुझे लगता है कि यह कुछ अलग कर रहा है। – BrainSlugs83