Windows 7 X64 Mute Auslesen

  • Hey Leute

    Weiß jemand wie man Mute der SystemLautstärke Windows 7 X64 ausließt??

    Über die Bass.au3 gibts keine Funktion... Jedenfalls hab ich sie nicht gefunden...

    Danke für eure antworten!!!!!! :rock::rock:

    Edit: Für alle, Die die _bass.au3 für Windows X32/ 64 noch nicht haben:

    https://autoit.de/index.php?page…5601#post185601

    3 Mal editiert, zuletzt von Mr_gitarre (18. Oktober 2010 um 17:23)

  • Wieso so ungeduldig musste zum Tanztee? :rofl: nach 21Min. tststs
    Manchmal erschreckt mich die Erwartungshaltung einiger ungemein.

    P.S. Ich weiß es nicht, sonst hätte ich es geschrieben.

    Achtung Anfänger! :whistling:

    Betrachten des Quellcodes auf eigene Gefahr, bei Übelkeit,Erbrechen,Kopfschmerzen übernehme ich keine Haftung. 8o

  • An Dietmar

    Beitrag 1: Gestern, 14:00
    Beitrag 2: Heute, 14:21

    ...

    Merkste wat?? 24h und 21 min ...
    Und nich so schreckhaft sein..;)

    ...

    Zum Thema: schade dass niemand ne antwort weiß, denn ich hab schon überlange gesucht und leider nix gefunden...:(

  • Die Funktion

    [autoit]


    ;~ $re = _isMute(1000)
    ;~ If @error Then ConsoleWrite(@error & @CRLF)
    ;~ ConsoleWrite($re & @CRLF)
    ;===============================================================================
    ;
    ; Function Name: _isMute
    ; Description:: Check for mute sound
    ; Parameter(s): ControlID
    ; Voulme = 1000
    ; Wave = 2000
    ; SW-Synthesizer = 3000
    ; CD-Player = 4000
    ; Mikrofon = 5000
    ; Line-In = 6000
    ; Requirement(s): ---
    ; Return Value(s): 0 = not muted, 1 = muted, -1 = timeout, -2 = ControlID not found
    ; Author(s): Thorsten Meger (Xenobiologist)
    ;
    ;===============================================================================

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

    Func _isMute($opt = 1000)
    Local $retVal = 0, $ex = False
    If Not WinExists('[CLASS:Volume Control]') Then
    Run('sndvol32', '', @SW_HIDE)
    $ex = True
    EndIf
    If WinWait('[CLASS:Volume Control]', '', 2) = 0 Then Return -1
    $retVal = ControlCommand('[CLASS:Volume Control]', '', $opt, 'isChecked')
    If @error Then Return -2
    If $ex = True Then WinClose('[CLASS:Volume Control]')
    Return $retVal
    EndFunc ;==>_isMute

    [/autoit]

    Sieht gut aus... Funktioniert leider nicht, weil es bei windows 7 nicht 'sndvol32' zu starten ist...
    Weiß jemand, wie dieser Dienst bei Windows 7 heißt...??? ==> Vielleicht funktioniert ja dann diese Funktion...

    Ps: Wie/ Wo kann ich eigentlich nachlesen, welche Parameter aufgerufen werden müssen..?

  • Habe mal einbischen experimentiert mit dieser Funktion unter Windows 7

    [autoit]

    MsgBox(0,"",_isMute())
    ; Return Value(s): 0 = not muted, 1 = muted, -1 = timeout, -2 = ControlID not found
    ; SystemSounds = 305
    ; Laustprecher = 410

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

    Func _isMute($opt = 305)
    Local $retVal = 0, $ex = False
    If Not WinExists('[CLASS:Volume Control]') Or WinExists('[CLASS:#32770]') Then
    If @OSArch = "x86" Then
    Run('sndvol32', '', @SW_HIDE)
    Else
    Run('sndvol', '',@SW_HIDE)
    EndIf
    $ex = True
    EndIf
    If @OSArch = "x86" Then
    If WinWait('[CLASS:Volume Control]', '', 2) = 0 Then Return -1
    $retVal = ControlCommand('[CLASS:Volume Control]', '', $opt, 'isChecked')
    If @error Then $retVal = -2
    If $ex = True Then WinClose('[CLASS:Volume Control]')
    Else
    If WinWait('[CLASS:#32770]', '', 2) = 0 Then Return -1
    ;$retVal = ControlCommand('[CLASS:#32770]', '', $opt, 'SendCommandID',305)
    $retVal = ControlCommand('[CLASS:#32770]', '', $opt, 'IsChecked')
    If @error Then $retVal = -2
    If $ex = True Then WinClose('[CLASS:#32770]')
    EndIf
    Return $retVal
    EndFunc ;==>_isMute

    [/autoit]

    Leider kann ich den Status der "Toolbar" nicht auslesen, das sollte jemand machen, der sich mit solchen Sachen auskennt :p

    Lg, Fabian

  • Hier habs mal gemacht und ist unter Win 7 x64 getestet:

    Spoiler anzeigen
    [autoit]


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

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

    Func _GetMasterVolumeState()
    Run("SndVol.exe", "", @SW_MINIMIZE)
    WinWait("Lautstärkemixer")
    $mute = WinGetText("Lautstärkemixer")
    If StringInStr($mute, "Stummschaltung für Lautsprecher aufheben") > 0 Then
    $mute = "mute"
    Else
    $mute = "no mute"
    EndIf
    WinClose("Lautstärkemixer")
    Return $mute
    EndFunc ;==>_GetMasterVolumeMute

    [/autoit]

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

    2 Mal editiert, zuletzt von chip (18. Oktober 2010 um 00:37)


  • Ps: chip, deins Funktioniert nicht, werds aber bearbeiten, dass es funktionert;)

    Funktioniert zu 200%, habs auf mehreren Win 7 x64 Rechner (drei Stück) getestet. Gehe mal davon aus, dass dir der Unterschied zwischen MasterVolume und Systemsounds nicht klar ist.

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

    2 Mal editiert, zuletzt von chip (18. Oktober 2010 um 08:14)

  • Oh... chip
    Ich hab dir unrecht getan!!!! Sorry dafür...

    Wüsstest du auch, wie man jetzt die Mute setzt bzw Rücksetzt??
    Habs über ctrlClick versucht, bin nen bisschen dran gescheitert...:(

    Hättest du ne idee..?

  • Da du ja nicht schreibst was du genau vor hast. Da sich die controlids und sogar die Instanzen ändern sobald neue Programme aufgehen die Audioelemnte haben kannst darüber nichts allgemeingültiges machen. Also nun mein Vorschlag, einfach den Dienst "Windows-Audio" stoppen bzw. starten. Hier die entsprechenden Funktionen dazu: [ gelöst ] Prüfen ob ein Windows Dienst gestartet ist.

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

  • Na ich will ein tool schreiben, womit is Mute auslesen bzw setzen kann.. und das auslesen funktiniert, dank dir schon !!!

    Nur noch das setzen von Mute muss noch funktionieren... Und ich glaube das, worauf du da verlinkt hast hilft mir nicht...

    Ich suche sowas wie

    [autoit]

    _muteMaster(1)

    [/autoit]
  • Ist halt kein Muten sondern eine deaktivieren des Audio-Dienstes was dem gleichkommt. Ohne laufenden Dienst keinen Sound.

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

  • ... ok ...

    Leider nicht das, was ich mir so vorgestellt habe....

    Also ich hab versucht mittels ControlClick den MuteButton anzusprechen... Dazu hab ich mir den Text genommen der kommt, wenn man mit der Maus rüberfährt ..
    Die Control-ID konnte ich zu dem Button leider NICHT bestimmt mit dem InfoTool von AutoIT weil er den Button nicht anvisieren will...

    [autoit]


    AutoItSetOption("WinDetectHiddenText", 1) ;Dafür zuständig, dass AutoIT aus Versteckten Fenstern lesen kann

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

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

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

    _SetMasterVolumeMute(1)
    Sleep(5000)
    _SetMasterVolumeMute(0)

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

    Func _GetMasterVolumeState()
    $pid = Run("SndVol.exe", "", @SW_HIDE)
    WinWait("Lautstärkemixer - Lautsprecher")
    $mute = WinGetText("Lautstärkemixer - Lautsprecher")
    MsgBox(0,"",$mute)
    If StringInStr($mute, "Stummschaltung für Lautsprecher") > 0 Then
    $mute = "1"
    Else
    $mute = "0"
    EndIf
    ProcessClose($pid)
    Return $mute
    EndFunc ;==>_GetMasterVolumeMute

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

    Func _SetMasterVolumeMute($opt = 1)
    $pid = Run("SndVol.exe", "")
    WinWait("Lautstärkemixer - Lautsprecher")
    Switch $opt
    Case 1 ;Setzen von Mute...
    MsgBox(0,"","Setze Mute")
    ControlClick('Lautstärkemixer - Lautsprecher ', 'Stumm: Lautsprecher', '')
    Case 0 ;Aufheben von Mute...
    ControlClick('Lautstärkemixer - Lautsprecher ', 'Stummschaltung für Lautsprecher aufheben', '')
    EndSwitch
    ProcessClose($pid)
    EndFunc

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

    EDIT: Habs hinbekommen Mute wegzumachen, doch einschalten kann ichs nicht wegen fehlender ID...!

    Edit:
    Send("{VOLUME_Mute}")

    Erfolgreich gelöst!

    2 Mal editiert, zuletzt von Mr_gitarre (18. Oktober 2010 um 17:23)

  • Zitat

    Merkste wat?? 24h und 21 min ...


    :rofl: übersehen, passte aber auch so schön :whistling:

    Achtung Anfänger! :whistling:

    Betrachten des Quellcodes auf eigene Gefahr, bei Übelkeit,Erbrechen,Kopfschmerzen übernehme ich keine Haftung. 8o