// The return value should be TRUE OR FALSE means enabled or disabled. AUDIO_DEVICE_API BOOL GetCaptureListDeviceState(DeviceInfo *pDeviceInfo, int index) { InternalDeviceInfo *pInternalDeviceInfo = (InternalDeviceInfo *) pDeviceInfo; HRESULT hr = S_OK; IMMDevice *pDevice = NULL; if (pInternalDeviceInfo->pCaptureCollection != NULL) { hr = pInternalDeviceInfo->pCaptureCollection->Item(index, &pDevice); } // assert(hr == S_OK); DWORD dwState; pDevice->GetState(&dwState); SAFE_RELEASE(pDevice); return dwState == DEVICE_STATE_ACTIVE ? TRUE : FALSE; }
std::vector<IMMDevice*> AudioMasterMind::getActiveDevices() { CoInitialize(NULL); IMMDeviceEnumerator* deviceEnumeratorPtr = NULL; HRESULT hr = CoCreateInstance( __uuidof(MMDeviceEnumerator), NULL, CLSCTX_ALL, __uuidof(IMMDeviceEnumerator), (void**)&deviceEnumeratorPtr ); if (FAILED(hr)) { BOOST_LOG_TRIVIAL(error) << "Failed to create IMMDeviceEnumerator hr:" << hr; throw std::logic_error{ "Failed to create IMMDeviceEnumerator" }; } IMMDeviceCollection* deviceCollectionPtr = NULL; hr = deviceEnumeratorPtr->EnumAudioEndpoints(eAll, DEVICE_STATEMASK_ALL, &deviceCollectionPtr); if (FAILED(hr)) { BOOST_LOG_TRIVIAL(error) << "Failed to enumerate audio endpoints "; throw std::logic_error{ "Failed to enumerate audio endpoints" }; } UINT deviceCount = 0; hr = deviceCollectionPtr->GetCount(&deviceCount); if (FAILED(hr)) { BOOST_LOG_TRIVIAL(error) << "Failed to get the count of devices"; throw std::logic_error{ "Failed to get Device count" }; } BOOST_LOG_TRIVIAL(info) << "Device Count is: " << deviceCount; std::vector<IMMDevice*> activeDevices; for (unsigned int i = 0; i < deviceCount; ++i) { IMMDevice* devicePtr = NULL; hr = deviceCollectionPtr->Item(i, &devicePtr); if (FAILED(hr)) { BOOST_LOG_TRIVIAL(error) << "Failed to get device no. " << i; throw std::logic_error{ "Failed to get Device Ptr" }; } DWORD deviceState; hr = devicePtr->GetState(&deviceState); if (FAILED(hr)) { BOOST_LOG_TRIVIAL(error) << "Failed to get devices state: " << hr; throw std::logic_error{ "Failed to get Device State" }; } if (deviceState == DEVICE_STATE_ACTIVE) { activeDevices.push_back(devicePtr); } } return activeDevices; }