uses MMSystem;
function GetMasterVolume(): DWORD;
var
Line: MIXERLINE;
Controls: MIXERLINECONTROLS;
MasterVolume: MIXERCONTROL;
Details: TMIXERCONTROLDETAILS;
UnsignedDetails: MIXERCONTROLDETAILS_UNSIGNED;
begin
ZeroMemory(@Line, sizeof(Line));
Line.cbStruct:= sizeof(Line);
Line.dwComponentType:= MIXERLINE_COMPONENTTYPE_DST_SPEAKERS;
if mixerGetLineInfo(0, @Line, MIXER_GETLINEINFOF_COMPONENTTYPE) = MMSYSERR_NOERROR then
begin
Controls.cbStruct:= sizeof(Controls);
Controls.dwLineID:= Line.dwLineID;
Controls.cControls:= 1;
Controls.dwControlType:= MIXERCONTROL_CONTROLTYPE_VOLUME;
Controls.cbmxctrl:= sizeof(MIXERCONTROL);
Controls.pamxctrl:= @MasterVolume;
if mixerGetLineControls(0, @Controls, MIXER_GETLINECONTROLSF_ONEBYTYPE) = MMSYSERR_NOERROR then
begin
Details.cbStruct:= sizeof(TMIXERCONTROLDETAILS);
Details.dwControlID:= MasterVolume.dwControlID;
Details.cChannels:= 1;
Details.cMultipleItems:= 0;
Details.cbDetails:= sizeof(MIXERCONTROLDETAILS_UNSIGNED);
Details.paDetails:= @UnsignedDetails;
mixerGetControlDetails(0, @Details, MIXER_SETCONTROLDETAILSF_VALUE);
end;
end;
Result:= muldiv(UnsignedDetails.dwValue, 100, $FFFF);
end;