#include <mmdeviceapi.h>
#include <endpointvolume.h>
void SetMicMute(bool mute)
{
HRESULT hr;
CoInitialize(NULL);
IMMDeviceEnumerator *deviceEnumerator = NULL;
hr = CoCreateInstance(__uuidof(MMDeviceEnumerator), NULL, CLSCTX_INPROC_SERVER,
__uuidof(IMMDeviceEnumerator), (LPVOID *)&deviceEnumerator);
IMMDevice *defaultDevice = NULL;
hr = deviceEnumerator->GetDefaultAudioEndpoint(eCapture, eConsole, &defaultDevice);
deviceEnumerator->Release();
deviceEnumerator = NULL;
IAudioEndpointVolume *endpointVolume = NULL;
hr = defaultDevice->Activate(__uuidof(IAudioEndpointVolume), CLSCTX_INPROC_SERVER, NULL, (LPVOID *)&endpointVolume);
defaultDevice->Release();
defaultDevice = NULL;
hr = endpointVolume->SetMute(mute, NULL);
endpointVolume->Release();
CoUninitialize();
}
拿到endpointVolume, 就可以随意调用相关API了, 这里是SetMute, 也可以根据msdn选择需要的函数,
这里的eCapture表示麦克风, 也可以改成eRender来操作扬声器
MSDN:
IAudioEndpointVolume (endpointvolume.h) - Win32 apps | Microsoft Docs
还有另外一种通过访问UI控件来操作的方法:参考Qt C++设置获取Windows音量,麦克风,静音,恢复静音_yu_20501253的博客-CSDN博客
作者人非常好, 在其评论区提供了百度网盘下载, 供参考