头文件
#include <mmdeviceapi.h>
#include <endpointvolume.h>
#include <audioclient.h>
pro文件添加 QT += axcontainer
1,获取系统音量
int MainWindow::sysVolume()
{
HRESULT hr;
IMMDeviceEnumerator* pDeviceEnumerator=nullptr;
IMMDevice* pDevice=nullptr;
IAudioEndpointVolume* pAudioEndpointVolume=nullptr;
IAudioClient* pAudioClient=nullptr;
try{
hr = CoCreateInstance(__uuidof(MMDeviceEnumerator),nullptr,CLSCTX_ALL,__uuidof(IMMDeviceEnumerator),(void**)&pDeviceEnumerator);
if(FAILED(hr)) throw "CoCreateInstance";
hr = pDeviceEnumerator->GetDefaultAudioEndpoint(eRender,eMultimedia,&pDevice);
if(FAILED(hr)) throw "GetDefaultAudioEndpoint";
hr = pDevice->Activate(__uuidof(IAudioEndpointVolume),CLSCTX_ALL,nullptr,(void**)&pAudioEndpointVolume);
if(FAILED(hr)) throw "pDevice->Active";
hr = pDevice->Activate(__uuidof(IAudioClient),CLSCTX_ALL,nullptr,(void**)&pAudioClient);
if(FAILED(hr)) throw "pDevice->Active";
float fVolume;
hr = pAudioEndpointVolume->GetMasterVolumeLevelScalar(&fVolume);
if(FAILED(hr)) throw "SetMasterVolumeLevelScalar";
pAudioClient->Release();
pAudioEndpointVolume->Release();
pDevice->Release();
pDeviceEnumerator->Release();
int intVolume = fVolume*100+1;
if(fVolume>100)
{
fVolume =100;
}
return intVolume;
}
catch(...){
if(pAudioClient) pAudioClient->Release();
if(pAudioEndpointVolume) pAudioEndpointVolume->Release();
if(pDevice) pDevice->Release();
if(pDeviceEnumerator) pDeviceEnumerator->Release();
throw;
}
}
2,设置系统音量
bool MainWindow::SetVolumeLevel(int level)
{
HRESULT hr;
IMMDeviceEnumerator* pDeviceEnumerator=nullptr;
IMMDevice* pDevice=nullptr;
IAudioEndpointVolume* pAudioEndpointVolume=nullptr;
IAudioClient* pAudioClient=nullptr;
try{
hr = CoCreateInstance(__uuidof(MMDeviceEnumerator),nullptr,CLSCTX_ALL,__uuidof(IMMDeviceEnumerator),(void**)&pDeviceEnumerator);
if(FAILED(hr)) throw "CoCreateInstance";
hr = pDeviceEnumerator->GetDefaultAudioEndpoint(eRender,eMultimedia,&pDevice);
if(FAILED(hr)) throw "GetDefaultAudioEndpoint";
hr = pDevice->Activate(__uuidof(IAudioEndpointVolume),CLSCTX_ALL,nullptr,(void**)&pAudioEndpointVolume);
if(FAILED(hr)) throw "pDevice->Active";
hr = pDevice->Activate(__uuidof(IAudioClient),CLSCTX_ALL,nullptr,(void**)&pAudioClient);
if(FAILED(hr)) throw "pDevice->Active";
if(level==-2){
hr = pAudioEndpointVolume->SetMute(FALSE,nullptr);
if(FAILED(hr)) throw "SetMute";
}else if(level==-1){
hr = pAudioEndpointVolume->SetMute(TRUE,nullptr);
if(FAILED(hr)) throw "SetMute";
}else{
if(level<0 || level>100){
hr = E_INVALIDARG;
throw "Invalid Arg";
}
float fVolume;
fVolume = level/100.0f;
hr = pAudioEndpointVolume->SetMasterVolumeLevelScalar(fVolume,&GUID_NULL);
if(FAILED(hr)) throw "SetMasterVolumeLevelScalar";
pAudioClient->Release();
pAudioEndpointVolume->Release();
pDevice->Release();
pDeviceEnumerator->Release();
return true;
}
}
catch(...){
if(pAudioClient) pAudioClient->Release();
if(pAudioEndpointVolume) pAudioEndpointVolume->Release();
if(pDevice) pDevice->Release();
if(pDeviceEnumerator) pDeviceEnumerator->Release();
throw;
}
return false;
}
代码链接:https://download.csdn.net/download/m0_61745059/87379516