1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
| UNIT VolumeMute;
INTERFACE
USES mmSystem,Dialogs;
PROCEDURE SetVolumeMute(Value:Boolean);
{----------------------------------------------------------------}
{ }IMPLEMENTATION{ }
{----------------------------------------------------------------}
VAR hMix:HMIXER;
mxlc:MIXERLINECONTROLS;
mxcd:TMIXERCONTROLDETAILS;
mcdMute:MIXERCONTROLDETAILS_BOOLEAN;
mxc:MIXERCONTROL;
mxl:TMIXERLINE;
intRet,nMixerDevs:Integer;
{----------------------------------------------------------------}
PROCEDURE SetVolumeMute(Value:Boolean);
BEGIN
nMixerDevs:=mixerGetNumDevs();
IF((nMixerDevs<1))THEN EXIT;
intRet:=mixerOpen(@hMix,0,0,0,0);
IF(intRet=MMSYSERR_NOERROR)THEN BEGIN
mxl.dwComponentType:=MIXERLINE_COMPONENTTYPE_DST_SPEAKERS;
mxl.cbStruct:=SizeOf(mxl);
intRet:=mixerGetLineInfo(hMix,@mxl,MIXER_GETLINEINFOF_COMPONENTTYPE);
IF(intRet=MMSYSERR_NOERROR)THEN BEGIN
FillChar(mxlc,SizeOf(mxlc),0);
mxlc.cbStruct:=SizeOf(mxlc);
mxlc.dwLineID:=mxl.dwLineID;
mxlc.dwControlType:=MIXERCONTROL_CONTROLTYPE_MUTE;
mxlc.cControls:=1;
mxlc.cbmxctrl:=SizeOf(mxc);
mxlc.pamxctrl:=@mxc;
intRet:=mixerGetLineControls(hMix,@mxlc,MIXER_GETLINECONTROLSF_ONEBYTYPE);
IF(intRet=MMSYSERR_NOERROR)THEN BEGIN
FillChar(mxcd,SizeOf(mxcd),0);
mxcd.cbStruct:=SizeOf(TMIXERCONTROLDETAILS);
mxcd.dwControlID:=mxc.dwControlID;
mxcd.cChannels:=1;
mxcd.cbDetails:=SizeOf(MIXERCONTROLDETAILS_BOOLEAN);
mxcd.paDetails:=@mcdMute;
mcdMute.fValue:=Ord(Value);
intRet:=mixerSetControlDetails(hMix,@mxcd,MIXER_SETCONTROLDETAILSF_VALUE);
IF(intRet<>MMSYSERR_NOERROR)THEN ShowMessage('SetControlDetails Error');
END ELSE ShowMessage('GetLineInfo Error');
END;
intRet:=mixerClose(hMix);
END;
END;
{----------------------------------------------------------------}
END. |
Partager