Aktuelles Volume auch unter Vista abfragen

  • XP
    [autoit]

    #include <GuiSlider.au3>
    Run(@SystemDir & "\SndVol32.exe", "", @SW_HIDE)
    WinWait("Lautstärkeregelung")
    $handel = ControlGetHandle("Lautstärkeregelung", "", "[CLASS:msctls_trackbar32; INSTANCE:1]")
    $Pos = _GUICtrlSlider_GetPos($handel)
    WinClose("Lautstärkeregelung")
    MsgBox(0, "Lautstärke", $Pos)

    [/autoit]
  • Nein, bei mir nicht. (XP Sp3 - Realtek HD onboard Sound)
    1) Der mixer heißt sndvol32.exe
    2) Das Fenster heißt nach dem Hauptregler (meisten Summe)
    3) Der Regler hat instance 2 ( isntance 1 ist Balance)
    ( Lautstärke geht von 0 (Maximal) bis 500 (~Stumm) )

    Spoiler anzeigen
    [autoit]

    #include <GuiSlider.au3>
    Run(@SystemDir & "\SndVol32.exe","",@SW_HIDE)
    WinWait("Summe")
    $handel = ControlGetHandle("Summe", "", "[CLASS:msctls_trackbar32; INSTANCE:2]")
    $Pos = _GUICtrlSlider_GetPos($handel)
    WinClose("Summe")
    MsgBox(0, "Lautstärke", $Pos)

    [/autoit]
  • Gibt es da keine Universallösung?
    Sonst stell ich mein Programm halt nur für Vista aus :P

  • Vllt haben die Fenster ja die gleichen Fensterklassen ? ;)

    Spoiler anzeigen
    [autoit]

    #include <GuiSlider.au3>

    [/autoit] [autoit][/autoit] [autoit]

    MsgBox(0, 'Lautstärke', _SoundGetMasterVolume())

    [/autoit] [autoit][/autoit] [autoit]

    Func _SoundGetMasterVolume()
    Local $handel, $vol
    Switch @OSVersion
    Case 'WIN_XP'
    Run(@SystemDir & "\SndVol32.exe", "", @SW_HIDE)
    WinWait("[CLASS:Volume Control]")
    $handel = ControlGetHandle("[CLASS:Volume Control]", "", "[CLASS:msctls_trackbar32; INSTANCE:2]")
    $vol = _GUICtrlSlider_GetPos($handel)
    WinClose("[CLASS:Volume Control]")
    Return (500 - $vol)/5
    Case 'WIN_VISTA'
    Run(@SystemDir & "\SndVol.exe", "", @SW_HIDE)
    WinWait("[CLASS:Volume Control]")
    $handel = ControlGetHandle("[CLASS:Volume Control]", "", "[CLASS:msctls_trackbar32; INSTANCE:1]")
    $vol = _GUICtrlSlider_GetPos($handel)
    WinClose("[CLASS:Volume Control]")
    Return $vol
    EndSwitch
    EndFunc

    [/autoit]
  • So, Danke an alle!

    Hier jetzt wies auch unter Vista funktionieren sollte ;) :

    [autoit]

    #include <GuiSlider.au3>

    [/autoit][autoit][/autoit][autoit]

    MsgBox(0, 'Lautstärke', _SoundGetMasterVolume())

    [/autoit][autoit][/autoit][autoit]

    Func _SoundGetMasterVolume()
    Local $handel, $vol
    Switch @OSVersion
    Case 'WIN_XP'
    Run(@SystemDir & "\SndVol32.exe", "", @SW_HIDE)
    WinWait("[CLASS:Volume Control]")
    $handel = ControlGetHandle("[CLASS:Volume Control]", "", "[CLASS:msctls_trackbar32; INSTANCE:2]")
    $vol = _GUICtrlSlider_GetPos($handel)
    WinClose("[CLASS:Volume Control]")
    Return (500 - $vol) / 5
    Case 'WIN_VISTA'
    Run(@SystemDir & "\SndVol.exe", "", @SW_HIDE)
    WinWait("Lautstärkemixer")
    $handel = ControlGetHandle("Lautstärkemixer", "", "[CLASS:msctls_trackbar32; INSTANCE:1]")
    $vol = _GUICtrlSlider_GetPos($handel)
    WinClose("Lautstärkemixer")
    Return $vol
    EndSwitch
    EndFunc ;==>_SoundGetMasterVolume

    [/autoit]

    Geht das jetzt als neue UDF durch? :rofl:

  • Ich habe mal beruhend auf meinem Kentnissstand dass hier gemacht:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <GuiSlider.au3>
    #include <WindowsConstants.au3>
    #include <WinApi.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Global $Label[10], $Timer = 0, $Form1

    [/autoit] [autoit][/autoit] [autoit]

    HotKeySet("^{UP}", "_Volume_Up")
    HotKeySet("^{DOWN}", "_Volume_Down")
    HotKeySet("^{RIGHT}", "_Volume_Mute")

    [/autoit] [autoit][/autoit] [autoit]

    Func _Volume_Up()
    Send("{VOLUME_UP}")
    $Timer = 0
    _Show()
    EndFunc ;==>_Volume_Up

    [/autoit] [autoit][/autoit] [autoit]

    Func _Volume_Down()
    Send("{VOLUME_DOWN}")
    $Timer = 0
    _Show()
    EndFunc ;==>_Volume_Down

    [/autoit] [autoit][/autoit] [autoit]

    Func _Volume_Mute()
    Send("{VOLUME_MUTE}")
    $Timer = 0
    _Show()
    EndFunc ;==>_Volume_Mute

    [/autoit] [autoit][/autoit] [autoit]

    Func _Show()
    GUIDelete($Form1)
    $Form1 = GUICreate("Form1", 350, 92, -1, 0, $WS_POPUP, BitOR($WS_EX_TOOLWINDOW, $WS_EX_TOPMOST, $WS_EX_WINDOWEDGE, $WS_EX_LAYERED))
    GUISetBkColor(0xFFFFFF)
    _API_SetLayeredWindowAttributes($Form1, 0xFFFFFF, 255)
    $Pic1 = GUICtrlCreatePic(@ScriptDir & "\Images\lautsprecher.gif", 0, 0, 92, 92, BitOR($SS_NOTIFY, $WS_GROUP, $WS_CLIPSIBLINGS))
    $Label[0] = GUICtrlCreateLabel("", 104, 8, 20, 73)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Label[1] = GUICtrlCreateLabel("", 128, 8, 20, 73)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Label[2] = GUICtrlCreateLabel("", 152, 8, 20, 73)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Label[3] = GUICtrlCreateLabel("", 176, 8, 20, 73)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Label[4] = GUICtrlCreateLabel("", 200, 8, 20, 73)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Label[5] = GUICtrlCreateLabel("", 224, 8, 20, 73)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Label[6] = GUICtrlCreateLabel("", 248, 8, 20, 73)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Label[7] = GUICtrlCreateLabel("", 272, 8, 20, 73)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Label[8] = GUICtrlCreateLabel("", 296, 8, 20, 73)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Label[9] = GUICtrlCreateLabel("", 320, 8, 20, 73)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Volume = _SoundGetMasterVolume()
    If @error = 1 Then MsgBox(16, "Fehler", "Leider wird Ihr Betriebssystem nicht unterstützt.")
    $Volume = Round($Volume / 10)
    For $i = 0 To $Volume - 1
    GUICtrlSetBkColor($Label[$i], 0x0000FF)
    Next
    GUISetState()
    EndFunc ;==>_Show

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    Sleep(100)
    $Timer += 1
    If $Timer = 30 Then GUISetState(@SW_HIDE, $Form1)
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    ;===============================================================================
    ;
    ; Function Name: _API_SetLayeredWindowAttributes
    ; Description:: Sets Layered Window Attributes:) See MSDN for more informaion
    ; Parameter(s):
    ; $hwnd - Handle of GUI to work on
    ; $i_transcolor - Transparent color
    ; $Transparency - Set Transparancy of GUI
    ; $isColorRef - If True, $i_transcolor is a COLORREF-Strucure, else an RGB-Color
    ; Requirement(s): Layered Windows
    ; Return Value(s): Success: 1
    ; Error: 0
    ; @error: 1 to 3 - Error from DllCall
    ; @error: 4 - Function did not succeed - use
    ; _WinAPI_GetLastErrorMessage or _WinAPI_GetLastError to get more information
    ; Author(s): Prog@ndy
    ;
    ;===============================================================================
    ;
    Func _API_SetLayeredWindowAttributes($hwnd, $i_transcolor, $Transparency = 255, $isColorRef = False)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Local Const $LWA_ALPHA = 0x2
    Local Const $LWA_COLORKEY = 0x1
    If Not $isColorRef Then
    $i_transcolor = Hex(String($i_transcolor), 6)
    $i_transcolor = Execute('0x00' & StringMid($i_transcolor, 5, 2) & StringMid($i_transcolor, 3, 2) & StringMid($i_transcolor, 1, 2))
    EndIf
    Local $Ret = DllCall("user32.dll", "int", "SetLayeredWindowAttributes", "hwnd", $hwnd, "long", $i_transcolor, "byte", $Transparency, "long", $LWA_COLORKEY + $LWA_ALPHA)
    Select
    Case @error
    Return SetError(@error, 0, 0)
    Case $Ret[0] = 0
    Return SetError(4, 0, 0)
    Case Else
    Return 1
    EndSelect
    EndFunc ;==>_API_SetLayeredWindowAttributes

    [/autoit] [autoit][/autoit] [autoit]

    Func _SoundGetMasterVolume()
    Local $handel, $vol
    Switch @OSVersion
    Case 'WIN_XP'
    Run(@SystemDir & "\SndVol32.exe", "", @SW_HIDE)
    WinWait("[CLASS:Volume Control]")
    $handel = ControlGetHandle("[CLASS:Volume Control]", "", "[CLASS:msctls_trackbar32; INSTANCE:2]")
    $vol = _GUICtrlSlider_GetPos($handel)
    WinClose("[CLASS:Volume Control]")
    Return (500 - $vol) / 5
    Case 'WIN_VISTA'
    Run(@SystemDir & "\SndVol.exe", "", @SW_HIDE)
    WinWait("Lautstärkemixer")
    $handel = ControlGetHandle("Lautstärkemixer", "", "[CLASS:msctls_trackbar32; INSTANCE:1]")
    $vol = _GUICtrlSlider_GetPos($handel)
    WinClose("Lautstärkemixer")
    Return $vol
    Case Else
    SetError(1)
    EndSwitch
    EndFunc ;==>_SoundGetMasterVolume

    [/autoit]

    Ihr solltet das Zip-Archiv für das Bild benutzen (s.u.)
    Kann man da noch an der Geschwindigkeit feilen?