系统音量的问题 自己AP中要获取系统的音量值,不知如何实现? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你可以用以下程序试试: MMRESULT rc; // 多媒体函数返回结果变量 HMIXER hMixer; // 混合器设备句柄 MIXERLINE mxl; // 音频线路标准状态信息结构体 MIXERLINECONTROLS mxlc; // 音频线路控制器集合信息结构体 MIXERCONTROL mxc; // 单个音频线路控制器信息结构体 // 打开混合器设备 rc = mixerOpen(&hMixer, // 返回的设备句柄 0, // 单声卡的设备ID为零 0, // 不使用回调机制 0, // 回调函数参数 0); // MIXER_OBJECTF_MIXER宏的值,表示任选有效设备ID // 打开混合器设备无错的话,则 if (MMSYSERR_NOERROR == rc) { // MIXERLINE 结构体变量清零 ZeroMemory(&mxl, sizeof(MIXERLINE)); mxl.cbStruct = sizeof(MIXERLINE); // 微软用此办法判断版本 // 指出需要获取的通道,声卡的音频输出用MIXERLINE_COMPONENTTYPE_DST_SPEAKERS mxl.dwComponentType = MIXERLINE_COMPONENTTYPE_DST_SPEAKERS; // 取得混合器设备的指定线路信息 rc = mixerGetLineInfo((HMIXEROBJ)hMixer, &mxl, // 取得MIXERLINE::dwComponentType指定类型的第一个音频线路信息 MIXER_GETLINEINFOF_COMPONENTTYPE); // 取得混合器设备的指定线路信息成功的话,则 if (MMSYSERR_NOERROR == rc) { // MIXERCONTROL 结构体变量清零 ZeroMemory(&mxc, sizeof(MIXERCONTROL)); mxc.cbStruct = sizeof(mxc); // 微软用此办法判断版本 // MIXERLINECONTROLS 结构体变量清零 ZeroMemory(&mxlc, sizeof(MIXERLINECONTROLS)); 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 结构体变量字节大小 // 取得控制器信息 rc = mixerGetLineControls((HMIXEROBJ)hMixer, &mxlc, MIXER_GETLINECONTROLSF_ONEBYTYPE); // 取得控制器信息成功的话,则 if (MMSYSERR_NOERROR == rc) { // 获取控制器中的值的音量范围:mxc.Bounds.lMinimum到mxc.Bounds.lMaximum. MIXERCONTROLDETAILS mxcd; // 控制器的状态信息 MIXERCONTROLDETAILS_SIGNED volStruct; // 音量结构体变量(就一个成员量) // MIXERCONTROLDETAILS 结构体变量清零 ZeroMemory(&mxcd, sizeof(mxcd)); mxcd.cbStruct = sizeof(mxcd); // 微软用此办法判断版本 mxcd.dwControlID = mxc.dwControlID; // 上面取得的控制器标识 mxcd.paDetails = &volStruct; // 音量结构体变量指针 mxcd.cbDetails = sizeof(volStruct); // 音量结构体变量字节大小 mxcd.cChannels = 1; // 取得或设置全部通道 // 获得音量值 rc = mixerGetControlDetails((HMIXEROBJ)hMixer, &mxcd, MIXER_GETCONTROLDETAILSF_VALUE); if (MMSYSERR_NOERROR == rc) { CString str = ""; str.Format("音量:%X", volStruct.lValue); AfxMessageBox(str); } } } } 试过以上程序,在WIN7下得不到系统的实际音量值,哪位大大能指点下吗? CMyVolumeCtrl是用MFC的。我的是SDK的,不知有人这样实现过吗? http://cache.baidu.com/c?m=9d78d513d99c15fe4fece4697c1cc0111c43f0102ba6a7027ea48438e3732f425017e9ac54210705a3d20d1316df4e4b9b862102361421c78cbe885da9bd85592c9f5740645bc61f1d895fe9895124b23d8d0ab7f24cf0ba8763d2f88ec4df230f9d15183ad7a5de01574d9131ae4371fef5d90e4e0e4eedf06632b90a2c77de3e47bd44f9ea3769&p=80769a4e9c9a11a05bea90655b55c1&user=baidu&fm=sc&query=MFC%C8%E7%BA%CE%BB%F1%C8%A1%CF%B5%CD%B3%D2%F4%C1%BF&qid=b252f91d10c8ea3f&p1=3可能有你要的,我也不太懂!没做过 MFC or QT? 求助:怎样在单文档里面把每一个菜单对应的对话框加载到view类上去呢 operator关键字是什么意思? 有关时间的问题,请大家帮帮我 如何学习VC 如何在VC下响应PCI中断 请教高手,关于midi文件的存储? 网络通信 〉〉〉一些基础问题?????????? …………………………小女子花了好大的工夫写了一个程序,请各位大虾看看,留下你的E—MAIL——》 为什么加入“custom control"控件后,调试运行程序却没有反应呢?谢谢参与 关于单文档音乐添加..救命
HMIXER hMixer; // 混合器设备句柄
MIXERLINE mxl; // 音频线路标准状态信息结构体
MIXERLINECONTROLS mxlc; // 音频线路控制器集合信息结构体
MIXERCONTROL mxc; // 单个音频线路控制器信息结构体 // 打开混合器设备
rc = mixerOpen(&hMixer, // 返回的设备句柄
0, // 单声卡的设备ID为零
0, // 不使用回调机制
0, // 回调函数参数
0); // MIXER_OBJECTF_MIXER宏的值,表示任选有效设备ID // 打开混合器设备无错的话,则
if (MMSYSERR_NOERROR == rc)
{
// MIXERLINE 结构体变量清零
ZeroMemory(&mxl, sizeof(MIXERLINE)); mxl.cbStruct = sizeof(MIXERLINE); // 微软用此办法判断版本
// 指出需要获取的通道,声卡的音频输出用MIXERLINE_COMPONENTTYPE_DST_SPEAKERS
mxl.dwComponentType = MIXERLINE_COMPONENTTYPE_DST_SPEAKERS;
// 取得混合器设备的指定线路信息
rc = mixerGetLineInfo((HMIXEROBJ)hMixer,
&mxl,
// 取得MIXERLINE::dwComponentType指定类型的第一个音频线路信息
MIXER_GETLINEINFOF_COMPONENTTYPE);
// 取得混合器设备的指定线路信息成功的话,则
if (MMSYSERR_NOERROR == rc)
{
// MIXERCONTROL 结构体变量清零
ZeroMemory(&mxc, sizeof(MIXERCONTROL)); mxc.cbStruct = sizeof(mxc); // 微软用此办法判断版本 // MIXERLINECONTROLS 结构体变量清零
ZeroMemory(&mxlc, sizeof(MIXERLINECONTROLS));
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 结构体变量字节大小
// 取得控制器信息
rc = mixerGetLineControls((HMIXEROBJ)hMixer,
&mxlc,
MIXER_GETLINECONTROLSF_ONEBYTYPE); // 取得控制器信息成功的话,则
if (MMSYSERR_NOERROR == rc)
{
// 获取控制器中的值的音量范围:mxc.Bounds.lMinimum到mxc.Bounds.lMaximum.
MIXERCONTROLDETAILS mxcd; // 控制器的状态信息
MIXERCONTROLDETAILS_SIGNED volStruct; // 音量结构体变量(就一个成员量) // MIXERCONTROLDETAILS 结构体变量清零
ZeroMemory(&mxcd, sizeof(mxcd)); mxcd.cbStruct = sizeof(mxcd); // 微软用此办法判断版本
mxcd.dwControlID = mxc.dwControlID; // 上面取得的控制器标识
mxcd.paDetails = &volStruct; // 音量结构体变量指针
mxcd.cbDetails = sizeof(volStruct); // 音量结构体变量字节大小
mxcd.cChannels = 1; // 取得或设置全部通道
// 获得音量值
rc = mixerGetControlDetails((HMIXEROBJ)hMixer,
&mxcd,
MIXER_GETCONTROLDETAILSF_VALUE); if (MMSYSERR_NOERROR == rc)
{
CString str = ""; str.Format("音量:%X", volStruct.lValue); AfxMessageBox(str);
}
}
}
}
可能有你要的,我也不太懂!没做过