您可以通过 MMDevice 在 Windows Vista 或更高版本上枚举设备
IMMDeviceEnumerator *enumerator = nullptr;
IMMDevice *device = nullptr;
hr = CoCreateInstance(__uuidof(MMDeviceEnumerator), nullptr, CLSCTX_ALL, __uuidof(IMMDeviceEnumerator), (void**)&enumerator);
if (FAILED(hr))
...
// Get the default renderer
hr = enumerator->GetDefaultAudioEndpoint(eRender, eConsole, &device);
if (FAILED(hr))
...
hr = pEndpoint->OpenPropertyStore(
STGM_READ, &pProps);
if (FAILED(hr))
...
PROPVARIANT varName;
// Initialize container for property value.
PropVariantInit(&varName);
// Get the endpoint's physical speaker property.
hr = pProps->GetValue(
PKEY_AudioEndpoint_PhysicalSpeakers, &varName);
if (FAILED(hr))
…
// See https://docs.microsoft.com/en-us/windows/win32/coreaudio/pkey-audioendpoint-physicalspeakers
PropVariantClear(&varName);
请参阅Microsoft 文档