; создание объекта IAudioEndpointVolume
$oVolume = GetVolumeObject()
If @error Then Exit ConsoleWrite("!Error " & @error & @CRLF)
; текущий уровень (от 0.0 до 1.0)
Global $iLevel
$oVolume.GetMasterVolumeLevelScalar($iLevel)
ConsoleWrite("Уровень звука : " & Round($iLevel * 100) & "%" & @CRLF)
; установка уровня (от 0.0 до 1.0)
$iLevel = 0.34 ; 34%
$oVolume.SetMasterVolumeLevelScalar($iLevel, 0)
; включение (0) или отключение (1) звука
Global $fMute = True
$oVolume.SetMute($fMute, 0)
; проверка отключения звука
$oVolume.GetMute($fMute)
ConsoleWrite("Звук отключён : " & ($fMute = True) & @CRLF)
; --------------------
Func GetVolumeObject()
Local Const $CLSCTX_INPROC_SERVER = 0x1
Local Const $sCLSID_MMDeviceEnumerator = "{BCDE0395-E52F-467C-8E3D-C4579291692E}"
Local Const $sIID_IMMDeviceEnumerator = "{A95664D2-9614-4F35-A746-DE8DB63617E6}"
Local Const $tagIMMDeviceEnumerator = "EnumAudioEndpoints hresult(dword;dword;ptr*);" & _
"GetDefaultAudioEndpoint hresult(dword;dword;ptr*);" & _
"GetDevice hresult(wstr;ptr*);" & _
"RegisterEndpointNotificationCallback hresult(ptr);" & _
"UnregisterEndpointNotificationCallback hresult(ptr);"
Local Const $sIID_IMMDevice = "{D666063F-1587-4E43-81F1-B948E807363F}"
Local Const $tagIMMDevice = "Activate hresult(clsid;dword;variant*;ptr*);" & _
"OpenPropertyStore hresult(dword;ptr*);" & _
"GetId hresult(ptr*);" & _
"GetState hresult(dword*);"
Local Const $sIID_IAudioEndpointVolume = "{5CDF2C82-841E-4546-9722-0CF74078229A}"
Local Const $tagIAudioEndpointVolume = "RegisterControlChangeNotify hresult(ptr);" & _
"UnregisterControlChangeNotify hresult(ptr);" & _
"GetChannelCount hresult(uint*);" & _
"SetMasterVolumeLevel hresult(float;ptr);" & _
"SetMasterVolumeLevelScalar hresult(float;ptr);" & _
"GetMasterVolumeLevel hresult(float*);" & _
"GetMasterVolumeLevelScalar hresult(float*);" & _
"SetChannelVolumeLevel hresult(uint;float;ptr);" & _
"SetChannelVolumeLevelScalar hresult(uint;float;ptr);" & _
"GetChannelVolumeLevel hresult(uint;float*);" & _
"GetChannelVolumeLevelScalar hresult(uint;float*);" & _
"SetMute hresult(int;ptr);" & _
"GetMute hresult(int*);" & _
"GetVolumeStepInfo hresult(uint*;uint*);" & _
"VolumeStepUp hresult(ptr);" & _
"VolumeStepDown hresult(ptr);" & _
"QueryHardwareSupport hresult(dword*);" & _
"GetVolumeRange hresult(float*;float*;float*)"
Local $oMMDeviceEnumerator = ObjCreateInterface($sCLSID_MMDeviceEnumerator, $sIID_IMMDeviceEnumerator, $tagIMMDeviceEnumerator)
If Not IsObj($oMMDeviceEnumerator) Then Return SetError(1, 0, 0)
Local $eRender, $eConsole, $pDefaultDevice, $pEndpointVolume
$oMMDeviceEnumerator.GetDefaultAudioEndpoint($eRender, $eConsole, $pDefaultDevice)
Local $oDefaultDevice = ObjCreateInterface($pDefaultDevice, $sIID_IMMDevice, $tagIMMDevice)
If Not IsObj($oDefaultDevice) Then Return SetError(2, 0, 0)
$oDefaultDevice.Activate($sIID_IAudioEndpointVolume, $CLSCTX_INPROC_SERVER, 0, $pEndpointVolume)
Local $oEndpointVolume = ObjCreateInterface($pEndpointVolume, $sIID_IAudioEndpointVolume, $tagIAudioEndpointVolume)
If Not IsObj($oEndpointVolume) Then Return SetError(3, 0, 0)
Return $oEndpointVolume
EndFunc