Я на самом деле не знаю Windows API, поэтому мой ответ, вероятно, не самый лучший, и, может быть, есть даже лучшие способы.
HRESULT hr = CoInitialize(NULL);
IMMDeviceEnumerator *pEnum = NULL;
hr = CoCreateInstance(__uuidof(MMDeviceEnumerator), NULL, CLSCTX_ALL, __uuidof(IMMDeviceEnumerator), (void**)&pEnum);
if(SUCCEEDED(hr))
{
IMMDeviceCollection *pDevices;
// Enumerate the output devices.
hr = pEnum->EnumAudioEndpoints(eAll, DEVICE_STATE_ACTIVE, &pDevices);
// You can choose between eAll, eCapture or eRender
}
С этим вы сможете различать ввод (захват) и вывод (рендер).(Это то, что вы хотели, верно?)
Код взят из этой статьи .Вы можете посмотреть на него правильные вызовы API и библиотеки, он даже может дать вам больше информации.
Надеюсь, это полезно.