设为首页 加入收藏

TOP

调节系统音量VC++(适合win和xp系统) 打开静音 增减和减小系统音量 (四)
2014-11-23 19:05:49 来源: 作者: 【 】 浏览:56
Tags:调节 系统 音量 适合 win 打开 静音 增减 减小
oup=SsnBeginSpeakGroup();
if (mxcdVolume.dwValue<65535)
{
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 = 100;
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 = 65535;
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->VolumeStepUp(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;
}

// 以下为系统音量减小1

INT DecreaseVolume(__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);

MIXERCONTR

首页 上一页 1 2 3 4 下一页 尾页 4/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇VC维的图像解释 下一篇wmi 获取当前登录用户名

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: