OLDETAILS_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);
HANDLE hSpeakGroup=SsnBeginSpeakGroup();
mxcdVolume.dwValue = mxcdVolume.dwValue - 655;
if (mxcdVolume.dwValue > 1)
{
INT nVolume = INT( mxcdVolume.dwValue/655.35);
CString ToSpeak = _T("系统音量减小到");
CString Volume;
Volume.Format(_T("%d"), nVolume);
ToSpeak = ToSpeak + Volume;
SSN_SPEAK_OPTION SpeakOption;
if (hSpeakGroup!=INVALID_HANDLE_VALUE)
{
SsnAddSpeakString(hSpeakGroup,ToSpeak,&SpeakOption);
}
mixerSetControlDetails((HMIXEROBJ)m_hMixer,&mxcd,
MIXER_OBJECTF_HMIXER|MIXER_SETCONTROLDETAILSF_VALUE);
}
else
{
INT nVolume = 0;
CString ToSpeak = _T("系统音量减小到");
CString Volume;
Volume.Format(_T("%d"), nVolume);
ToSpeak = ToSpeak + Volume;
SSN_SPEAK_OPTION SpeakOption;
if (hSpeakGroup!=INVALID_HANDLE_VALUE)
{
SsnAddSpeakString(hSpeakGroup,ToSpeak,&SpeakOption);
}
mxcdVolume.dwValue = 1;
mixerSetControlDetails((HMIXEROBJ)m_hMixer,&mxcd,
MIXER_OBJECTF_HMIXER|MIXER_SETCONTROLDETAILSF_VALUE);
}
SsnEndSpeakGroup(hSpeakGroup);
return TRUE;
}
//Windows 音量调节
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;
}
hr = endpointVolume->VolumeStepDown(NULL);
float currentVolume;
hr = endpointVolume->GetMasterVolumeLevelScalar(¤tVolume);
INT nVolume = INT(currentVolume * 100);
HANDLE hSpeakGroup=SsnBeginSpeakGroup();
CString ToSpeak = _T("系统音量减小到");
CString Volume;
Volume.Format(_T("%d"), nVolume);
ToSpeak = ToSpeak + Volume;
SSN_SPEAK_OPTION SpeakOption;
if (hSpeakGroup!=INVALID_HANDLE_VALUE)
{
SsnAddSpeakString(hSpeakGroup,ToSpeak,&SpeakOption);
}
if (FAILED(hr))
{
return FALSE;
}
if (hr == S_FALSE)
{
return FALSE;
}
SsnEndSpeakGroup(hSpeakGroup);
return TRUE;
}