2009-09-15 8 views
5

से पूरा ऑडियो डिवाइस नाम प्राप्त करें क्या पूर्ण विंडोज XP में ऑडियो डिवाइस नाम और बाद में प्राप्त करने का कोई तरीका है?विंडोज

मैं MIXERCAPS का उपयोग कर सकता हूं लेकिन szPname सदस्य 32 अक्षरों (एनयूएल सहित) तक सीमित होगा। "माइक्रोफ़ोन (हाई डेफिनिशन ऑडियो डिवाइस)" के ऑडियो डिवाइस नाम के लिए, मैं केवल "माइक्रोफ़ोन (हाई डेफिनिशन ऑड" वापस प्राप्त करता हूं। यह MAXPNAMELEN को 32 तक परिभाषित करने के कारण है। मैंने इसे किसी बड़े नंबर पर फिर से परिभाषित करने का प्रयास नहीं किया है ।

MIXERCAPS mc; 
ZeroMemory(&mc, sizeof(MIXERCAPS)); 
mm = mixerGetDevCaps(reinterpret_cast<UINT_PTR>(m_hMixer), &mc, sizeof(MIXERCAPS)); 

मैं this question देखा

+0

क्षमा करें, लेकिन, इस सवाल के बारे में क्या प्रोजेक्टिंग भाषा है? –

उत्तर

1

यदि आप क्लासिक विंडोज मल्टीमीडिया इंटरफ़ेस का उपयोग करते हैं तो शायद आप MAXPNAMELEN सीमा के आसपास नहीं जा सकते हैं, क्योंकि यह विंडोज़ में संकलित है।

हालांकि यदि आप इसके बजाय डायरेक्टसाउंड का उपयोग करते हैं तो आप पूर्ण डिवाइस नाम प्राप्त करने में सक्षम हो सकते हैं। निम्नलिखित कोड अवांछित है लेकिन मुझे लगता है कि इसे काम करना चाहिए।

यह डायरेक्टशो/ActiveX, उपयोग कर रहा है यह डायरेक्टसाउंड उपकरणों, जो लिपटे WaveOut उपकरणों में शामिल हैं और साथ ही enumurates:

BOOL CALLBACK EnumCallback(LPGUID guid, LPCSTR descr, LPCSTR modname, LPVOID ctx) 
{ 
    std::vector<std::string> *names = (std::vector<std::string>*)ctx; 
    names->push_back(std::string(descr)); 
    return TRUE; 
} 

int main() 
{ 
    std::vector<std::string> names; 
    if (!FAILED(DirectSoundEnumerate(&EnumCallback, &names))) 
    { 
     // do stuff 
    } 
} 
0

आप DevCon का उपयोग कर की कोशिश कर सकते माइक्रोसॉफ्ट के साइट here पर है, लेकिन यह विस्टा का संदर्भ और बाद में उपलब्ध

:

यहाँ कोड मैं का उपयोग कर रहा है।।।

मुझे लगता है कि devcon listclass मीडिया आपको वह परिणाम दे सकता है जिसे आप ढूंढ रहे हैं।

+0

या कोशिश करें: devcon listclass AudioEndpoint –

0

नीचे मेरी (डेल्फी) कोड है।

procedure EnumAudioDevices; 
var 
    dsCreateDevEnum : ICreateDevEnum; 
    EnumDevice  : IEnumMoniker; 
    DeviceMoniker : IMoniker; 
    Data    : Integer; 
    DevicePropBag : IPropertyBag; 
    DeviceName  : OLEVariant; 
    I    : Integer; 
begin 
    // CLSID_CQzFilterClassManager = Entire DirectShow Filter List 
    If CoCreateInstance(CLSID_SystemDeviceEnum,nil,CLSCTX_INPROC_SERVER,IID_ICreateDevEnum,dsCreateDevEnum) = S_OK then 
    Begin 
    If dsCreateDevEnum.CreateClassEnumerator(CLSID_AudioRendererCategory,EnumDevice,0) = S_OK then 
    Begin 
     I := 0; 
     EnumDevice.Reset; 
     While EnumDevice.Next(1,DeviceMoniker,@Data) = S_OK do 
     Begin 
     If DeviceMoniker.BindToStorage(nil,nil,IID_IPropertyBag,DevicePropBag) = NOERROR then 
     Begin 
      If DevicePropBag.Read('FriendlyName',DeviceName,nil) = NOERROR then 
      Begin 
      // Success 
      ShowMessage(DeviceName); 
      Inc(I); 
      End; 
      DevicePropBag := nil; 
     End; 
     DeviceMoniker := nil; 
     End; 
     EnumDevice := nil; 
    End; 
    dsCreateDevEnum := nil; 
    End; 
End;