windows — Получение доступа к метке имени записывающего устройства в Stack Overflow

Мне нужно прочитать имя записывающего устройства, отображаемое в свойствах Windows, звук -> записывающее устройство. Следуя моему примеру, это Realtek High Definition Audio (наверное, это имя контроллера).
Если Windows отображает Это, должна быть функция WinAPI, чтобы определить Это.
Я провел некоторое исследование Google об этом, но без особого успеха.

0

Решение

Это зависит от версии Windows, которую вы хотите имитировать. До Windows XP панель управления, несомненно, показала устройства DirectSound. Отображать их довольно просто и просто:

#include <windows.h>
#include <iostream>
#include <dsound.h>

#pragma comment(lib, "dsound.lib")
#pragma comment(lib, "ole32.lib")

BOOL CALLBACK sound_capture_callback(LPGUID, LPCSTR description, LPCSTR, void *) {
std::cout << description << "\n";
return true;
}

int main() {
DWORD ignore;
CoInitialize(NULL);
DirectSoundCaptureEnumerate(sound_capture_callback, (void*)&ignore);
CoUninitialize();
}

Начиная с Windows 7 (или, может быть, Vista — не помню точно), Microsoft добавила то, что они называют Media Foundation. Это концептуально несколько похоже, но немного сложнее. Последовательность выглядит примерно так:

  1. Вы начинаете с MFCreateAttributes создать COM-объект атрибутов Media Foundation.
  2. Вы используете этот объект SetGuid член, чтобы сказать ему, чтобы перечислить звуковые (а не видео) устройства.
  3. Ты звонишь MFEnumDeviceSources на самом деле перечислить устройства.
    Это дает вам указатели на IMFActivate интерфейсы.
  4. Ты звонишь GetAllocatedString на каждом интерфейсе (прохождение MF_DEVSOURCE_ATTRIBUTE_FRIENDLY_NAME) чтобы получить название устройства.

В последнем случае применяется обычное предупреждение для COM. Сам COM — слишком сложный беспорядок, и Media Foundation пытается максимально использовать эту концепцию. По сути, неизбежно, что код для перечисления MF-устройств будет как минимум в 3 раза длиннее и в 5 раз сложнее для понимания, чем код выше для DirectSound. Если вы серьезно используете MF, вам наверняка захочется создать некоторые обертки, чтобы изолировать это уродство, но вы не можете действительно избавиться от него, и для небольшой задачи, такой как перечисление устройств, вы, вероятно, не будете уменьшите это также.

0

Другие решения


По вопросам рекламы [email protected]