请教:WIN7下VC读取底层声音信息

longqian84 2009-11-13 05:09:36
下面这段程序是判断系统是静音还是非静音,在winxp下运行正常,但在win7下运行,不管系统是不是静音最后的bMute总是为FALSE。是什么地方win7不支持呢,困惑中,望高手指教,多谢。。。。。。
(附:在win7下以xp兼容模式运行也是正常。)

HMIXER hMixer; // Mixer handle used in mixer API calls.
MIXERCONTROL mxc; // Holds the mixer control data.
MIXERLINE mxl; // Holds the mixer line data.
MIXERLINECONTROLS mxlc; // Obtains the mixer control.
MIXERCONTROLDETAILS mxcd; // Gets the control values.
MIXERCONTROLDETAILS_SIGNED volStruct; // Gets the control values.
MMRESULT mmr;

void GetMute()
{

// 取得控制器.
ZeroMemory(&mxlc, sizeof(mxlc));
mxlc.cbStruct = sizeof(mxlc);
mxlc.dwLineID = mxl.dwLineID;
mxlc.dwControlType = MIXERCONTROL_CONTROLTYPE_MUTE;
mxlc.cControls = 1;
mxlc.cbmxctrl = sizeof(mxc);
mxlc.pamxctrl = &mxc;
//mxc.cMultipleItems=0;
ZeroMemory(&mxc, sizeof(mxc));
mxc.cbStruct = sizeof(mxc);
mmr = mixerGetLineControls((HMIXEROBJ)hMixer,&mxlc,
MIXER_GETLINECONTROLSF_ONEBYTYPE);
if (MMSYSERR_NOERROR != mmr)
{
/*MessageBox("获取音频控制器失败!","错误",MB_OK|MB_ICONERROR);*/
PostQuitMessage(-1);
}

// 初始化MIXERCONTROLDETAILS结构体
ZeroMemory(&mxcd, sizeof(mxcd));
mxcd.cbStruct = sizeof(mxcd);
mxcd.cbDetails = sizeof(volStruct);
mxcd.dwControlID = mxc.dwControlID;
mxcd.paDetails = &volStruct;
mxcd.cChannels = 1;

mmr = mixerGetControlDetails((HMIXEROBJ)hMixer, &mxcd,
MIXER_SETCONTROLDETAILSF_VALUE);

if(volStruct.lValue==1)
bMute=TRUE;
else
bMute=FALSE;
}
...全文
244 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
xzb1224 2010-05-19
  • 打赏
  • 举报
回复
楼主,我也刚遇到这个问题,如果你有了解决办法,或者是知道原因,请告诉我一声,QQ:199016671
xiaoji0009 2010-03-15
  • 打赏
  • 举报
回复
在vc中,有针对vista及以上的版本定义,则api应该有相应的改变,可以跟踪一下mfc中的WINVER,看是否在xp和win7下有差别。
oyljerry 2009-11-14
  • 打赏
  • 举报
回复
看一下API是否在WIN7上有变化
亚细亚 2009-11-14
  • 打赏
  • 举报
回复
win7刚发布,lz就开始研究了。顶一下!
longqian84 2009-11-13
  • 打赏
  • 举报
回复
应该不是吧,我以管理员身份运行还是不行啊!!急急急,在线等
MoXiaoRab 2009-11-13
  • 打赏
  • 举报
回复
莫非是权限问题?

2,643

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧