開発環境 Microsoft Visual Studio Community 2017
実行環境 Microsoft Windows 10 Home (64bit)
プロジェクトの種類 Visual C++ / 空のプロジェクト
プロジェクト名 atlmmdev

  • 参考

atlmmdev.cpp
#include <atlbase.h>
#include <mmdeviceapi.h>
#include <functiondiscoverykeys_devpkey.h>
#include <fcntl.h>	// _O_WTEXT
#include <io.h>		// _setmode
 
const CLSID CLSID_MMDeviceEnumerator = __uuidof(MMDeviceEnumerator);
 
int main()
{
	CComPtr<IMMDeviceEnumerator> pEnumerator;
	CComPtr<IMMDeviceCollection> pCollection;
	UINT count;
	HRESULT hr;
 
	_setmode(_fileno(stdout), _O_WTEXT);	// UTF16
	hr = CoInitialize(NULL);
 
	hr = pEnumerator.CoCreateInstance(CLSID_MMDeviceEnumerator);
	hr = pEnumerator->EnumAudioEndpoints(eRender, DEVICE_STATE_ACTIVE, &pCollection);
	hr = pCollection->GetCount(&count);
	if (count == 0) {
		wprintf(L"No endpoints found.\n");
	}
	for (UINT i = 0; i < count; i++) {
		CComPtr<IMMDevice> pEndpoint;
		CComPtr<IPropertyStore> pProps;
		PROPVARIANT varName;
		LPWSTR pwszID;
 
		hr = pCollection->Item(i, &pEndpoint);
		hr = pEndpoint->GetId(&pwszID);
		hr = pEndpoint->OpenPropertyStore(STGM_READ, &pProps);
		PropVariantInit(&varName);
		hr = pProps->GetValue(PKEY_Device_FriendlyName, &varName);
		wprintf(L"Endpoint %u: '%s' (%s)\n", i, varName.pwszVal, pwszID);
 
		CoTaskMemFree(pwszID);
	}
 
	CoUninitialize();
	return 0;
}
 
最終更新:2018年05月30日 17:03