BOOL
SetMute(
BOOL
bMute)
{
HMIXER hMixer;
MIXERCONTROL mxc;
MIXERLINE mxl;
MIXERLINECONTROLS mxlc;
MIXERCONTROLDETAILS mxcd;
MIXERCONTROLDETAILS_SIGNED volStruct;
MMRESULT mmr;
mmr = mixerOpen(&hMixer, 0, 0, 0, 0);
if
(mmr != MMSYSERR_NOERROR)
return
FALSE;
ZeroMemory(&mxl,
sizeof
(MIXERLINE));
mxl.cbStruct =
sizeof
(MIXERLINE);
mxl.dwComponentType = MIXERLINE_COMPONENTTYPE_DST_SPEAKERS;
mmr = mixerGetLineInfo((HMIXEROBJ)hMixer, &mxl, MIXER_GETLINEINFOF_COMPONENTTYPE);
if
(mmr != MMSYSERR_NOERROR)
return
FALSE;
ZeroMemory(&mxlc,
sizeof
(MIXERLINECONTROLS));
mxlc.cbStruct =
sizeof
(MIXERLINECONTROLS);
mxlc.dwLineID = mxl.dwLineID;
mxlc.dwControlType = MIXERCONTROL_CONTROLTYPE_MUTE;
mxlc.cControls = 1;
mxlc.cbmxctrl =
sizeof
(mxc);
mxlc.pamxctrl = &mxc;
ZeroMemory(&mxc,
sizeof
(MIXERCONTROL));
mxc.cbStruct =
sizeof
(MIXERCONTROL);
mmr = mixerGetLineControls((HMIXEROBJ)hMixer, &mxlc, MIXER_GETLINECONTROLSF_ONEBYTYPE);
if
(mmr != MMSYSERR_NOERROR)
return
FALSE;
ZeroMemory(&mxcd,
sizeof
(MIXERCONTROLDETAILS));
mxcd.cbStruct =
sizeof
(MIXERCONTROLDETAILS);
mxcd.cbDetails =
sizeof
(MIXERCONTROLDETAILS_SIGNED);
mxcd.dwControlID = mxc.dwControlID;
mxcd.paDetails = &volStruct;
mxcd.cChannels = 1;
volStruct.lValue = bMute;
mmr = mixerSetControlDetails((HMIXEROBJ)hMixer, &mxcd, MIXER_SETCONTROLDETAILSF_VALUE);
mixerClose(hMixer);
return
TRUE;
}