Jump to content

SoundGetWaveVolume on Windows Vista, 7, 8, 8.1 and 10


PeterVerbeek
 Share

Recommended Posts

Hi Guys,

I've noticed that the SoundGetWaveVolume UDF in an older topic isn't working on Windows Vista, 7, 8, 8.1 and 10. It's probably a Windows XP UDF. The UDF below does work. It successfully returns the volume set by SoundSetWaveVolume. It might need checking by the AutoIt community for some synthax finetuning.

; #FUNCTION# ====================================================================================================================
; Name...........: _SoundGetWaveVolume
; Description....: Returns app volume of script, Windows Vista, 7, 8, 10 only
; Syntax.........: _SoundGetWaveVolume([$iValueOnError = -1])
; Parameters.....: $iValueOnError           - Value to return when an error occurs
; Return values..: App volume of script or $iValueOnError at an error
; Error values...: @error = 1               - Unable to create Struct
;                  @error = 2               - Dll file not found
;                  @error = 3               - Wrong call so not on Windows Vista, 7, 8 or 10
;                  @error = 4               - Internal error, array not returned
;                  @error = 5               - Volume wasn't received
;                  @error = 6               - Volume couldn't read
; Author.........: Peter Verbeek
; Modified.......:
; ===============================================================================================================================
Func _SoundGetWaveVolume($iValueOnError = -1)
    Local $LPDWORD,$aMMRESULT,$iVolume

    $LPDWORD = DllStructCreate("dword")
    If @error <> 0 Then
        SetError(1)                                             ; 1 = unable to create Struct
        Return $iValueOnError
    EndIf
    ; get app volume of this script
    $aMMRESULT = DllCall("winmm.dll","uint","waveOutGetVolume","ptr",0,"long_ptr",DllStructGetPtr($LPDWORD))
    Switch @error
        Case 1
            SetError(2)                                         ; 2 = dll file not found
            Return $iValueOnError
        Case 2,3,4,5
            SetError(3)                                         ; 3 = wrong call so not on Windows Vista, 7, 8 or 10
            Return $iValueOnError
    EndSwitch
    If not IsArray($aMMRESULT) Then
        SetError(4)                                             ; 4 = internal error, array not returned
        Return $iValueOnError
    EndIf
    If $aMMRESULT[0] <> 0 Then
        SetError(5)                                             ; 5 = volume wasn't received
        Return $iValueOnError
    EndIf
    $iVolume = DllStructGetData($LPDWORD,1)
    If @error <> 0 Then
        SetError(6)                                             ; 6 = volume couldn't read
        Return $iValueOnError
    EndIf
    Return Round(100*$iVolume/4294967295)                       ; return in range 0 to 100 as SoundSetWaveVolume()
EndFunc

 

Edited by PeterVerbeek
error codes in function header added

Creator of the Peace equalizer, an interface for Equalizer APO. Besides Peace, my library of functions is also available on SourceForge.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...