#include <mmdeviceapi.h>
#include <Audioclient.h>
#include <stdio.h>
#include <mmsystem.h>
#include <string>
#include <vector>
#include "functiondiscoverykeys_devpkey.h"
using namespace std;
int main()
{
IMMDeviceEnumerator* pMMDeviceEnumerator = NULL;
//使用COM库,必须调用CoInitialize/CoInitializeEx
CoInitialize(NULL);
//获取枚举音频设备的对象
HRESULT hr = CoCreateInstance(
__uuidof(MMDeviceEnumerator), NULL, CLSCTX_ALL,
__uuidof(IMMDeviceEnumerator),
(void**)&pMMDeviceEnumerator);
if (SUCCEEDED(hr)) {
if (pMMDeviceEnumerator) {
IMMDeviceCollection* pDevice = NULL;
hr = pMMDeviceEnumerator->EnumAudioEndpoints(eCapture/*音频采集设备*/, DEVICE_STATE_ACTIVE/*当前有效设备*/, &pDevice);
if (SUCCEEDED(hr)) {
if (pDevice) {
//
UINT nDevice = 0;
hr = pDevice->GetCount(&nDevice);
if (SUCCEEDED(hr)) {
for (size_t i = 0; i < nDevice; i++){
//[in] nDevice
//设备编号。 如果集合包含 n 个设备,则设备的编号为 0 到 n– 1。
//[out] ppDevice
//指向指针变量的指针,方法在该变量中写入设备集合中指定项的 IMMDevice 接口的地址。 通过此方法,调用方获取对 接口的计数引用。 调用方负责通过调用接口的 Release 方法,在不再需要接口时释放接口。 如果 Item 调用失败, 则 * ppDevice 为 NULL
IMMDevice* ppDevice = NULL;
hr = pDevice->Item(i, &ppDevice);
if (SUCCEEDED(hr)) {
if (ppDevice) {
IPropertyStore* ppProperties = NULL;
hr = ppDevice->OpenPropertyStore(STGM_READ, &ppProperties);//OpenPropertyStore 方法检索设备属性存储的接口
if (SUCCEEDED(hr)) {
if (ppProperties) {
DWORD nProps = 0;
hr = ppProperties->GetCount(&nProps);//此方法返回附加到文件的属性数的计数
if (SUCCEEDED(hr)) {
//处理所有的属性
for (int j = 0; j < nProps; j++) {
PROPERTYKEY pkey;
hr = ppProperties->GetAt(j, &pkey);//主要就是为了GetValue获取到PROPERTYKEY
if (SUCCEEDED(hr)) {
PROPVARIANT deviceNameProp;
PropVariantInit(&deviceNameProp);
hr = ppProperties->GetValue(pkey, &deviceNameProp);//此方法检索特定属性的数据
if (SUCCEEDED(hr)) {
if (VT_LPWSTR == deviceNameProp.vt){//找到设备
//。。。
}
}
PropVariantClear(&deviceNameProp);
}
}
//处理单个属性
PROPVARIANT deviceNameProp;
PropVariantInit(&deviceNameProp);
ppProperties->GetValue(PKEY_Device_FriendlyName, &deviceNameProp);
if (SUCCEEDED(hr)) {
if (VT_LPWSTR == deviceNameProp.vt) {//找到设备
//。。。
}
}
PropVariantClear(&deviceNameProp);
}
ppProperties->Release();
}
}
ppDevice->Release();
}
}
}
}
pDevice->Release();
}
}
pMMDeviceEnumerator->Release();
}
}
CoUninitialize();
return 0;
}
windows c++ 获取当前音频输入设备
于 2024-08-07 16:20:24 首次发布