See the perfect mm in Windows version ask such a DOS command, found no, so I extracted the following code compiled a console program
Unit Unit1;
Interface
Uses MMSystem, Dialogs;
Type Tdevicename = (Master, microphone, waveout, Synth);
Procedure Setvolumemute (dn:tdevicename; Value:boolean);
Implementation
Procedure Setvolumemute (dn:tdevicename; Value:boolean);
Var
Hmix:hmixer;
Mxlc:mixerlinecontrols;
Mxcd:tmixercontroldetails;
vol:tmixercontroldetails_unsigned;
Mxc:mixercontrol;
Mxl:tmixerline;
Intret:integer;
Nmixerdevs:integer;
Mcdmute:mixercontroldetails_boolean;
Begin
Check if Mixer is available
Nmixerdevs: = Mixergetnumdevs ();
if (Nmixerdevs < 1) Then
Begin
Exit;
End
Open the mixer
Intret: = Mixeropen (@hMix, 0, 0, 0, 0);
If intret = Mmsyserr_noerror Then
Begin
Case DN of
Master:mxl.dwComponentType: = mixerline_componenttype_dst_speakers;
Microphone:
Mxl.dwcomponenttype: = Mixerline_componenttype_src_microphone;
WaveOut:mxl.dwComponentType: = Mixerline_componenttype_src_waveout;
Synth:mxl.dwComponentType: = Mixerline_componenttype_src_synthesizer;
End
Mxl.cbstruct: = SizeOf (MXL);
Mixerline Info
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;
Get the Mute control
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;
Set and UnSet Mute
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.