您的位置:首页 > 编程语言 > C语言/C++

VC++设置与取得系统音量

2011-11-17 15:02 337 查看
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; // 取得或设置全部通道

#if 0 // 设置音量

volStruct.lValue = 0; // 想要设置的值

rc = mixerSetControlDetails((HMIXEROBJ)hMixer,

&mxcd,

MIXER_SETCONTROLDETAILSF_VALUE);

#else

// 获得音量值

rc = mixerGetControlDetails((HMIXEROBJ)hMixer,

&mxcd,

MIXER_GETCONTROLDETAILSF_VALUE);

if (MMSYSERR_NOERROR == rc)

{

CString str = "";

str.Format("音量:%X", volStruct.lValue);

AfxMessageBox(str);

}

#endif

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: