コード例 #1
0
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;
    }
}
コード例 #2
0
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;
    }
}
コード例 #3
0
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;
}
コード例 #4
0
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;
}