void AudioEndpoint::SetAsDefault() { if (!IsValid()) return; // The following works if we are on Windows 7 or Windows 8 IPolicyConfig *pPolicyConfig7or8 = PolicyFactory::CreatePolicy7or8(); if (pPolicyConfig7or8 != NULL) { pPolicyConfig7or8->SetDefaultEndpoint(iId, eConsole); pPolicyConfig7or8->Release(); return; } // The following works if we are on Windows 10 IPolicyConfig *pPolicyConfig10 = PolicyFactory::CreatePolicy10(); if (pPolicyConfig10 != NULL) { pPolicyConfig10->SetDefaultEndpoint(iId, eConsole); pPolicyConfig10->Release(); return; } // The following works if we are on vista IPolicyConfigVista *pPolicyConfigVista = PolicyFactory::CreatePolicyVista(); if (pPolicyConfigVista != NULL) { pPolicyConfigVista->SetDefaultEndpoint(iId, eConsole); pPolicyConfigVista->Release(); return; } }
void AudioEndpoint::SetEnabled(TBool aEnabled) { if (!IsValid()) return; // The following works if we are on Windows 7 or Windows 8 IPolicyConfig *pPolicyConfig7or8 = PolicyFactory::CreatePolicy7or8(); if (pPolicyConfig7or8 != NULL) { pPolicyConfig7or8->SetEndpointVisibility(iId, aEnabled ? 1 : 0); pPolicyConfig7or8->Release(); return; } // The following works if we are on Windows 10 IPolicyConfig *pPolicyConfig10 = PolicyFactory::CreatePolicy10(); if (pPolicyConfig10 != NULL) { pPolicyConfig10->SetEndpointVisibility(iId, aEnabled ? 1 : 0); pPolicyConfig10->Release(); return; } // The following works if we are on vista IPolicyConfigVista *pPolicyConfigVista = PolicyFactory::CreatePolicyVista(); if (pPolicyConfigVista != NULL) { pPolicyConfigVista->SetEndpointVisibility(iId, aEnabled ? 1 : 0); pPolicyConfigVista->Release(); return; } }
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; }
BOOL SetDefaultAudioDevice_Vista(LPCTSTR lpszHardwareId, LPCTSTR lpszName) { HRESULT hr = S_FALSE; BOOL bSuccessful = FALSE; IMMDeviceEnumerator *pDeviceEnumerator = NULL; IMMDeviceCollection* pCollection = NULL; IPolicyConfigVista *pPolicyConfigVista = NULL; do { CElcAudioDeviceEnumerator enumerator; if (!enumerator.Enumerate(FALSE)) break; CElcDeviceItem * pAudioItem = enumerator.FindItemByPnpId(lpszHardwareId, lpszName); if (!pAudioItem) break; if (FAILED(CoCreateInstance( __uuidof(MMDeviceEnumerator), NULL, CLSCTX_INPROC_SERVER, __uuidof(IMMDeviceEnumerator), (LPVOID *)&pDeviceEnumerator))) { break; } if (FAILED(pDeviceEnumerator->EnumAudioEndpoints( eRender, DEVICE_STATE_ACTIVE, &pCollection))) { break; } LPWSTR lpszId = NULL; UINT nCount = 0; pCollection->GetCount(&nCount); for (UINT i=0; i<nCount; i++) { IMMDevice* pDevice = NULL; if (SUCCEEDED(pCollection->Item(i, &pDevice))) { pDevice->GetId(&lpszId); SAFE_RELEASE(pDevice); LPCWSTR lpszIdDup = lpszId + 17; if (pAudioItem->m_strDeviceId.CompareNoCase(lpszIdDup) == 0) break; CoTaskMemFree(lpszId); lpszId = NULL; } } if (lpszId && SUCCEEDED(CoCreateInstance( __uuidof(CPolicyConfigVistaClient), NULL, CLSCTX_ALL, __uuidof(IPolicyConfigVista), (LPVOID *)&pPolicyConfigVista))) { if (SUCCEEDED(pPolicyConfigVista->SetDefaultEndpoint(lpszId, eMultimedia)) && SUCCEEDED(pPolicyConfigVista->SetDefaultEndpoint(lpszId, eCommunications))) bSuccessful = TRUE; } if (lpszId) CoTaskMemFree(lpszId); } while (0); SAFE_RELEASE(pPolicyConfigVista); SAFE_RELEASE(pCollection); SAFE_RELEASE(pDeviceEnumerator); return bSuccessful; }