uses
MMSystem;
function
GetMasterMute(
Mixer: hMixerObj;
var
Control: TMixerControl): MMResult;
var
Line: TMixerLine;
Controls: TMixerLineControls;
begin
ZeroMemory(@Line, SizeOf(Line));
Line
.
cbStruct := SizeOf(Line);
Line
.
dwComponentType := MIXERLINE_COMPONENTTYPE_DST_SPEAKERS;
Result := mixerGetLineInfo(Mixer, @Line,
MIXER_GETLINEINFOF_COMPONENTTYPE);
if
Result = MMSYSERR_NOERROR
then
begin
ZeroMemory(@Controls, SizeOf(Controls));
Controls
.
cbStruct := SizeOf(Controls);
Controls
.
dwLineID := Line
.
dwLineID;
Controls
.
cControls :=
1
;
Controls
.
dwControlType := MIXERCONTROL_CONTROLTYPE_MUTE;
Controls
.
cbmxctrl := SizeOf(Control);
Controls
.
pamxctrl := @Control;
Result := mixerGetLineControls(Mixer, @Controls,
MIXER_GETLINECONTROLSF_ONEBYTYPE);
end
;
end
;
procedure
SetMasterMuteValue(
Mixer: hMixerObj;
Value:
Boolean
);
var
MasterMute: TMixerControl;
Details: TMixerControlDetails;
BoolDetails: TMixerControlDetailsBoolean;
Code: MMResult;
begin
Code := GetMasterMute(
0
, MasterMute);
if
Code = MMSYSERR_NOERROR
then
begin
with
Details
do
begin
cbStruct := SizeOf(Details);
dwControlID := MasterMute
.
dwControlID;
cChannels :=
1
;
cMultipleItems :=
0
;
cbDetails := SizeOf(BoolDetails);
paDetails := @BoolDetails;
end
;
LongBool(BoolDetails
.
fValue) := Value;
Code := mixerSetControlDetails(
0
, @Details,
MIXER_SETCONTROLDETAILSF_VALUE);
end
;
if
Code <> MMSYSERR_NOERROR
then
raise
Exception
.
CreateFmt(
'SetMasterMuteValue failure, '
+
'multimedia system error #%d'
, [Cоde]);
end
;
procedure
TForm1
.
Button1Click(Sender: TObject);
begin
SetMasterMuteValue(
0
, CheckBox1
.
Checked);
end
;