一、模拟键盘快捷键实现系统音量控制
1:放大音量:
keybd_event(VK_VOLUME_UP,MapVirtualKey(VK_VOLUME_UP,0),KEYEVENTF_EXTENDEDKEY,0);
keybd_event(VK_VOLUME_UP,MapVirtualKey(VK_VOLUME_UP,0),KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP,0);
2:减小音量:
keybd_event(VK_VOLUME_DOWN,MapVirtualKey(VK_VOLUME_DOWN,0),KEYEVENTF_EXTENDEDKEY,0);
keybd_event(VK_VOLUME_DOWN,MapVirtualKey(VK_VOLUME_DOWN,0),KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP,0);
3:静音/非静音:
keybd_event(VK_VOLUME_MUTE,MapVirtualKey(VK_VOLUME_MUTE,0),KEYEVENTF_EXTENDEDKEY,0);
keybd_event(VK_VOLUME_MUTE,MapVirtualKey(VK_VOLUME_MUTE,0),KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP,0);
二、WASAPI(Windows Audio Session API)方式
//Windows 系统音量设置
HRESULT hr = CoInitialize(NULL);
if (FAILED(hr))
{
return FALSE;
}
IMMDeviceEnumerator *deviceEnumerator = NULL;
hr = CoCreateInstance(__uuidof(MMDeviceEnumerator), NULL, CLSCTX_INPROC_SERVER,
__uuidof(IMMDeviceEnumerator), (LPVOID *)&deviceEnumerator);
IMMDevice *defaultDevice = NULL;
hr = deviceEnumerator->GetDefaultAudioEndpoint(eRender, eConsole, &defaultDevice);
if (FAILED(hr))
{
return FALSE;
}
deviceEnumerator->Release();
deviceEnumerator = NULL;
hr = defaultDevice->Activate(__uuidof(IAudioEndpointVolume), CLSCTX_INPROC_SERVER, NULL, reinterpret_cast(&m_endpointVolume));
if (FAILED(hr))
{
return FALSE;
}
BOOL currentMute;
hr = m_endpointVolume->GetMute(¤tMute);
if (FAILED(hr))
{
return FALSE;
}
if (currentMute == TRUE)
{
hr = m_endpointVolume->SetMute(FALSE, NULL);
}
float currentVolume;
hr = m_endpointVolume->GetMasterVolumeLevelScalar(¤tVolume); //把主音量的水平标量
if (FAILED(hr))
{
return FALSE;
}
std::cout << "Current Volume is: %f" << currentVolume << std::endl;
if (currentVolume < 0.5) //windows 系统 如果系统音量小于50% 则音量增加到50%
{
float Volume = 0.500;
hr = m_endpointVolume->SetMasterVolumeLevelScalar(Volume, NULL);
}