wControlID = mxc.dwControlID;
mxcd.cChannels = 1;
mxcd.cMultipleItems = 0;
mxcd.cbDetails = sizeof(MIXERCONTROLDETAILS_UNSIGNED);
mxcd.paDetails = &mxcdVolume;
mixerGetControlDetails((HMIXEROBJ)hMixer,&mxcd,
MIXER_OBJECTF_HMIXER|MIXER_GETCONTROLDETAILSF_VALUE);
mxcdVolume.dwValue ;
if (mxcdVolume.dwValue<6553) // XP 系统 如果打开后系统音量小于10% 则增加到10%
{
mxcdVolume.dwValue = 6553 ;
mixerSetControlDetails((HMIXEROBJ)hMixer,&mxcd,
MIXER_OBJECTF_HMIXER|MIXER_SETCONTROLDETAILSF_VALUE);
}
}
mixerClose(hMixer);
return FALSE;
}
catch(...)
{
mixerClose(hMixer);
return FALSE;
}
}
IMMDevice *defaultDevice = NULL;
hr = deviceEnumerator->GetDefaultAudioEndpoint(eRender, eConsole, &defaultDevice);
if (FAILED(hr))
{
return FALSE;
}
deviceEnumerator->Release();
deviceEnumerator = NULL;
IAudioEndpointVolume *endpointVolume;
hr = defaultDevice->Activate(__uuidof(IAudioEndpointVolume), CLSCTX_INPROC_SERVER, NULL, reinterpret_cast(&endpointVolume));
if (FAILED(hr))
{
return FALSE;
}
BOOL currentMute;
hr = endpointVolume->GetMute(¤tMute);
if (FAILED(hr))
{
return FALSE;
}
if (currentMute==TRUE)
{
hr = endpointVolume->SetMute(FALSE, NULL);
}
float currentVolume;
hr = endpointVolume->GetMasterVolumeLevelScalar(¤tVolume); //把主音量的水平标量
if (FAILED(hr))
{
return FALSE;
}
if(currentVolume<0.1) //windows 系统 如果系统音量小于10% 则音量增加到40%
{
float Volume = 0.400;
hr = endpointVolume->SetMasterVolumeLevelScalar(Volume,NULL);
}
if (FAILED(hr))
{
return FALSE;
}
return SSN_OK;
// 以下为系统音量增加1
INT IncreaseVolume(__in PSSN_CMD_CALL_DATA pCallData)
{
IMMDevice *device = NULL;
HRESULT hr = CoInitialize(NULL);
if (FAILED(hr))
{
return FALSE;
}
IMMDeviceEnumerator *deviceEnumerator = NULL;
hr = CoCreateInstance(__uuidof(MMDeviceEnumerator), NULL, CLSCTX_INPROC_SERVER,
__uuidof(IMMDeviceEnumerator), (LPVOID *)&deviceEnumerator);
if (FAILED(hr))
{
// xp 系统 调节音量
MIXERLINE mxl;
MIXERCONTROL mxc;
MIXERLINECONTROLS mxlc;
HMIXER m_hMixer;
MIXERCAPS m_mxcaps;
mixerOpen(&m_hMixer,0,NULL,
NULL,MIXER_OBJECTF_MIXER | CALLBACK_WINDOW);
mixerGetDevCaps((UINT)m_hMixer, &m_mxcaps, sizeof(MIXERCAPS));
mxl.cbStruct = sizeof(MIXERLINE);
mxl.dwComponentType =MIXERLINE_COMPONENTTYPE_DST_SPEAKERS;
mixerGetLineInfo((HMIXEROBJ)m_hMixer,&mxl,
MIXER_OBJECTF_HMIXER|MIXER_GETLINEINFOF_COMPONENTTYPE);
mxlc.cbStruct = sizeof(mxlc); // 微软用此办法判断版本
mxlc.dwLineID = mxl.dwLineID; // 上面取得的声卡音频输出线路标识
// 控制类型为控制音量
mxlc.dwControlType = MIXERCONTROL_CONTROLTYPE_VOLUME;
mxlc.cControls = 1; // 使用 MIXERCONTROL 结构体变量个数
mxlc.pamxctrl = &mxc; // MIXERCONTROL 结构体变量指针
mxlc.cbmxctrl = sizeof(mxc); // MIXERCONTROL 结构体变量字节大小
// 取得控制器信息
mixerGetLineControls((HMIXEROBJ)m_hMixer,
&mxlc,
MIXER_GETLINECONTROLSF_ONEBYTYPE);
MIXERCONTROLDETAILS_UNSIGNED mxcdVolume;
MIXERCONTROLDETAILS mxcd;
mxcd.cbStruct = sizeof(MIXERCONTROLDETAILS);
mxcd.dwControlID = mxc.dwControlID;
mxcd.cChannels = 1;
mxcd.cMultipleItems = 0;
mxcd.cbDetails = sizeof(MIXERCONTROLDETAILS_UNSIGNED);
mxcd.paDetails = &mxcdVolume;
mixerGetControlDetails((HMIXEROBJ)m_hMixer,&mxcd,
MIXER_OBJECTF_HMIXER|MIXER_GETCONTROLDETAILSF_VALUE);
mxcdVolume.dwValue = mxcdVolume.dwValue + 655;
HANDLE hSpeakGr