Hallo,
Mit folgendem Quelltext setzt ich im Windows das Mute. Das Icon im Tray ändert sich auch sofort und auch in der Lautstärkeregelung ist der Haken gesetzt. Leider kommt trotzdem noch Ton aus den Lautsprechern. Setze ich den Haken in der Lautstärkeregelung manuell (per Maus) funktioniert es jedoch. Was muss ich ändern, bzw. was hab ich vergessen?
Delphi-Quellcode:
class function TDeskSwitcher.SetMute(AMute: Boolean): Boolean;
function GetMasterMute(AMixer: hMixerObj; var AMixerControl: TMixerControl): Boolean;
var LMixerLine: TMixerLine;
LMixerLineCtrls: TMixerLineControls;
begin
ZeroMemory(@LMixerLine, SizeOf(LMixerLine));
LMixerLine.cbStruct := SizeOf(LMixerLine);
LMixerLine.dwComponentType := MIXERLINE_COMPONENTTYPE_DST_SPEAKERS;
if mixerGetLineInfo(AMixer, @LMixerLine, MIXER_GETLINEINFOF_COMPONENTTYPE) = MMSYSERR_NOERROR then
begin
ZeroMemory(@LMixerLineCtrls, SizeOf(LMixerLineCtrls));
LMixerLineCtrls.cbStruct := SizeOf(LMixerLineCtrls);
LMixerLineCtrls.dwLineID := LMixerLine.dwLineID;
LMixerLineCtrls.cControls := 1;
LMixerLineCtrls.dwControlType := MIXERCONTROL_CONTROLTYPE_MUTE;
LMixerLineCtrls.cbmxctrl := SizeOf(AMixerControl);
LMixerLineCtrls.pamxctrl := @AMixerControl;
result := MMSYSERR_NOERROR = mixerGetLineControls(AMixer, @LMixerLineCtrls, MIXER_GETLineCONTROLSF_ONEBYTYPE);
end else
result := False;
end;
var LMasterControl: TMixerControl;
LDetails: TMixerControlDetails;
LBoolDetails: TMixerControlDetailsBoolean;
begin
if GetMasterMute(0, LMasterControl) then
begin
with LDetails do
begin
cbStruct := SizeOf(LDetails);
dwControlID := LMasterControl.dwControlID;
cChannels := 1;
cMultipleItems := 0;
cbDetails := SizeOf(LBoolDetails);
paDetails := @LBoolDetails;
end;
LongBool(LBoolDetails.fValue) := AMute;
result := MMSYSERR_NOERROR = mixerSetControlDetails(0, @LDetails, MIXER_SETCONTROLDETAILSF_VALUE);
end else
result := False;
end;