COM库技术
#include <iostream>
#include <windows.h>
#include <mmdeviceapi.h>
#include <endpointvolume.h>
int main() {
CoInitialize(NULL);
IMMDeviceEnumerator* pEnumerator = NULL;
IMMDevice* pDevice = NULL;
IAudioEndpointVolume* pVolume = NULL;
// 初始化COM库
HRESULT hr = CoCreateInstance(__uuidof(MMDeviceEnumerator), NULL, CLSCTX_ALL, __uuidof(IMMDeviceEnumerator), (LPVOID*)&pEnumerator);
if (FAILED(hr)) {
std::cerr << "Error initializing COM library" << std::endl;
CoUninitialize();
return 1;
}
// 获取默认音频渲染设备
hr = pEnumerator->GetDefaultAudioEndpoint(eRender, eConsole, &pDevice);
if (FAILED(hr)) {
std::cerr << "Error getting default audio endpoint" << std::endl;
pEnumerator->Release();
CoUninitialize();
return 1;
}
// 获取IAudioEndpointVolume接口
hr = pDevice->Activate(__uuidof(IAudioEndpointVolume), CLSCTX_ALL, NULL, (LPVOID*)&pVolume);
if (FAILED(hr)) {
std::cerr << "Error getting IAudioEndpointVolume interface" << std::endl;
pDevice->Release();
pEnumerator->Release();
CoUninitialize();
return 1;
}
// 获取系统主音量
float masterVolume;
hr = pVolume->GetMasterVolumeLevelScalar(&masterVolume);
if (FAILED(hr)) {
std::cerr << "Error getting master volume level" << std::endl;
} else {
std::cout << "Master Volume Level: " << masterVolume * 100 << "%" << std::endl;
}
// 修改音量大小
float newVolume = 0.5; // 设置音量为50%
hr = pVolume->SetMasterVolumeLevelScalar(newVolume, NULL);
if (FAILED(hr)) {
std::cerr << "Error setting master volume level" << std::endl;
} else {
std::cout << "Master Volume Level set to: " << newVolume * 100 << "%" << std::endl;
}
//设置系统麦克风静音
BOOL bMute = TRUE;
hr = pVolume->SetMute(bMute, NULL);
//获取系统麦克风静音状态
BOOL bMute1 = FALSE;
hr = pVolume->GetMute(&bMute1);
// 释放资源
pVolume->Release();
pDevice->Release();
pEnumerator->Release();
CoUninitialize();
return 0;
}
注:获取设置系统麦克风音量只需要将eRender改为eCapture。