Windows API - Win32
一组适用于桌面和服务器应用程序的核心 Windows 应用程序编程接口 (API)。 以前称为 Win32 API。
105 个问题
我正在尝试查找连接到计算机的音频设备(输入和输出)。我想将我的默认音频从耳机切换到扬声器并返回。
文档感觉是周期性的,告诉我我需要使用 IMMDeviceCollection 来枚举我的设备,但要获取集合,我需要将其提供给 IMMDevicenumerator,但它不能为空,否则会抛出错误/警告。
简而言之,如何列出我的音频设备?如何切换被视为默认音频终结点的内容?
void AudioControl::getDevices()
{
IMMDeviceEnumerator* deviceEnumerator = NULL;
IMMDeviceCollection* deviceCollection = NULL;
HRESULT hr = CoInitialize(NULL);
if (SUCCEEDED(hr))
{
std::cout << "Initialized" << std::endl;
hr = CoCreateInstance(__uuidof(MMDeviceEnumerator), NULL, CLSCTX_ALL, __uuidof(IMMDeviceEnumerator), (void**)&deviceEnumerator);
if (SUCCEEDED(hr))
{
std::cout << "Created instance" << std::endl;
hr = deviceEnumerator->EnumAudioEndpoints(eRender, DEVICE_STATE_ACTIVE, (IMMDeviceCollection**)deviceCollection);
if (SUCCEEDED(hr))
{
if (deviceCollection != NULL)
{
std::cout << "Enumerated devices" << std::endl;
std::wcout << "Devices: " << deviceCollection << std::endl;
std::wcout << "Type: " << typeid(deviceCollection).name() << std::endl;
}
}
std::cout << "Done enumerating devices" << std::endl;
}
}
deviceCollection->Release();
deviceEnumerator->Release();
CoUninitialize();
}
此问题由: How to find audio devices that are connected - Microsoft Q&A总结而来
你好,
欢迎来到 Microsoft Q&A!
IMMDeviceEnumerator::EnumAudioEndpoints 方法返回一个 IMMDeviceCollection 接口,该接口表示多媒体设备资源的集合。该代码示例打印系统中所有音频呈现终结点设备的显示名称。另请参阅示例。
若要设置默认音频终结点,请参阅 example(IPolicyConfig) 。
如果答案是正确的解决方案,请单击“接受答案”并请投赞成票。如果您对此答案有其他疑问,请点击“评论”。
注意:如果您想接收此线程的相关电子邮件通知,请按照我们文档中的步骤启用电子邮件通知