Понятие Мультимедиа-устройств включает наверно все от звуковой карты заканчивая джойстиками. Универсальной ф-ции не знаю, вот пример получения устройств звука на DirectShow (нужные хедеры и либы я думаю сам разберешся), добавляет найденные в ListBox:
| Код | IEnumMoniker *pEnumCat = NULL; ICreateDevEnum *pSysDevEnum = NULL; // получаем список доступных устройств записи звука if(CoCreateInstance(CLSID_SystemDeviceEnum, NULL, CLSCTX_INPROC, IID_ICreateDevEnum, (void **)&pSysDevEnum) != S_OK) bReturn = FALSE; else { // Enumerate all filters of the selected category if(pSysDevEnum->CreateClassEnumerator(*clsid, &pEnumCat, 0) == S_OK) { IMoniker *pMoniker = 0; ULONG cFetched = 0; VARIANT varName = {0}; int nFilters = 0;
// If there are no filters of a requested type, show default string if (!pEnumCat) { m_listenumdev.AddString(TEXT("<< No entries >>\0")); return FALSE; } else m_listenumdev.EnableWindow(TRUE);
// Enumerate all items associated with the moniker while(pEnumCat->Next(1, &pMoniker, &cFetched) == S_OK) { IPropertyBag *pPropBag;
// Associate moniker with a file if(pMoniker->BindToStorage(0, 0, IID_IPropertyBag, (void **)&pPropBag) == S_OK) { // Read filter name from property bag varName.vt = VT_BSTR; if(pPropBag->Read(L"FriendlyName", &varName, 0) == S_OK) { // Get filter name (converting BSTR to a CString) CString str(varName.bstrVal); SysFreeString(varName.bstrVal); nFilters++;
// Add the category name and a pointer to its CLSID to the list box int nSuccess = m_listenumdev.AddString(str); int nIndexNew = m_listenumdev.FindStringExact(-1, str);
nSuccess = m_listenumdev.SetItemDataPtr(nIndexNew, pMoniker); // Cleanup interfaces if(pPropBag) { pPropBag->Release(); pPropBag = NULL; } } } } if(pEnumCat) { pEnumCat->Release(); pEnumCat = NULL; } } else bReturn = FALSE; pSysDevEnum->Release(); }
|
|