Page 1 sur 1
[R] Couper le son d'un programme
Posté : mer. 23 oct. 2013 12:49
par Utilisateur 4989 supprimé
Bonjour,
Je sais que pour couper le son de l'ordinateur, il suffit de faire : Send("{VOLUME_MUTE}")
Mais comment faire pour couper juste le son d'un logiciel lancé, sans couper le son de tout l'ordinateur ?
Merci d'avance.
Re: [..] Couper le son d'un programme
Posté : mer. 23 oct. 2013 16:02
par timmalos
Si on veut un truc propre et que quelqu'un souhaite s'y coller, lien msdn :
http://msdn.microsoft.com/en-us/library ... 85%29.aspx
Sinon, il existe une maniere d'automatiser à coup de ControlSend:
http://www.autoitscript.com/forum/topic ... ntrol-udf/
Re: [..] Couper le son d'un programme
Posté : mer. 23 oct. 2013 18:19
par Utilisateur 4989 supprimé
J'ai testé ceci :
► Afficher le texte
Code : Tout sélectionner
#include <GuiConstantsEx.au3>
#include <GuiSlider.au3>
WinSetVolume("Mozilla Firefox", "mute")
MsgBox(0, "", @error, 1)
Func WinSetVolume($targetTitle, $targetVolume = "toggle")
Const $localized = "Mute for "
$currentActive = WinGetHandle("[active]")
$mixerPid = Run(@SystemDir & "\SndVol.exe -r", "", @SW_HIDE)
$mixerHandle = WinWaitActive("[CLASS:#32770]")
WinActivate($currentActive)
$iSlider = 1
$iButton = 2
While 1
$currentButton = ControlGetText("[CLASS:#32770]", "", "[CLASS:ToolbarWindow32; INSTANCE:" & $iButton & "]")
If @error Then
ProcessClose($mixerPid)
Return 0
ElseIf StringInStr($currentButton, $localized & $targetTitle, 1) = 1 Then
If NOT ($targetVolume == "toggle") Then
$sliderHandle = ControlGetHandle("[CLASS:#32770]", "", "[CLASS:msctls_trackbar32; INSTANCE:" & $iSlider & "]")
If IsInt($targetVolume) Then
$setVolume = -($targetVolume-100)
Else
$setVolume = _GUICtrlSlider_GetPos($sliderHandle)
EndIf
If $setVolume < 100 Then
_GUICtrlSlider_SetPos($sliderHandle, $setVolume+1)
ControlSend("[CLASS:#32770]", "", "[CLASS:msctls_trackbar32; INSTANCE:" & $iSlider & "]", "{UP}")
Else
_GUICtrlSlider_SetPos($sliderHandle, $setVolume-1)
ControlSend("[CLASS:#32770]", "", "[CLASS:msctls_trackbar32; INSTANCE:" & $iSlider & "]", "{DOWN}")
EndIf
EndIf
If $targetVolume == "toggle" OR $targetVolume == "mute" Then ControlCommand("[CLASS:#32770]", "", "[CLASS:ToolbarWindow32; INSTANCE:" & $iButton & "]", "SendCommandID", 305)
WinClose($mixerHandle)
Return 1
EndIf
$iSlider += 1
$iButton += 2
WEnd
EndFunc
mais ça n'a pas marché (@error = 0).
Re: [..] Couper le son d'un programme
Posté : mer. 23 oct. 2013 22:22
par jguinch
Tu peux jeter un coup d'oeil sur
ce post, peut-être que...
Re: [..] Couper le son d'un programme
Posté : jeu. 24 oct. 2013 11:44
par Utilisateur 4989 supprimé
J'ai fais ceci :
► Afficher le texte
Code : Tout sélectionner
Global $muet = False
While 1
If ProcessExists("LOGICIEL_EN_QUESTION.exe") Then
If WinActive("[TITLE:XXXX; CLASS:YYYY]") = 0 And $muet = False Then
Global $muet = True
If ProcessExists("sndvol.exe") = 0 Then
Run(@SystemDir & "\sndvol.exe", @SystemDir)
EndIf
WinWait("Mélangeur de volume - Haut-parleurs / Casque (IDT High Definition Audio CODEC)", "Réduire le volume de LOGICIEL_EN_QUESTION au minimum")
ControlClick("Mélangeur de volume - Haut-parleurs / Casque (IDT High Definition Audio CODEC)", "Réduire le volume de LOGICIEL_EN_QUESTION au minimum", "[CLASS:ToolbarWindow32; INSTANCE:6]", "left", 1, 20, 15)
ElseIf Not WinActive("[TITLE:TITLE:XXXX; CLASS:YYYY]") = 0 And $muet = True Then
Global $muet = False
ControlClick("Mélangeur de volume - Haut-parleurs / Casque (IDT High Definition Audio CODEC)", "Réduire le volume de LOGICIEL_EN_QUESTION au minimum", "[CLASS:ToolbarWindow32; INSTANCE:6]", "left", 1, 20, 15)
EndIf
EndIf
WEnd
Mais il y a un petit problème. Le logiciel en question que je veux rendre muet peut très bien être "[CLASS:ToolbarWindow32; INSTANCE:6]" ou "[CLASS:ToolbarWindow32; INSTANCE:8]" ou autre chose.
Comment faire pour que le script détecte l'instance du logiciel en question pour le rendre muet et pas les autres logiciels ?
Re: [..] Couper le son d'un programme
Posté : jeu. 24 oct. 2013 12:22
par timmalos
Essayer [CLASS:ToolbarWindow32; TEXT:NomProgramme] au lieu de [CLASS:ToolbarWindow32; INSTANCE:6 ou 8]
Sinon ControlGetText()
Aidez vous de Autoit Windows Info
Re: [..] Couper le son d'un programme
Posté : dim. 27 oct. 2013 16:00
par Utilisateur 4989 supprimé
"[CLASS:ToolbarWindow32; TEXT:NomProgramme]" n'a pas marché.
J'ai essayé ControlGetText() :
Code : Tout sélectionner
If ControlGetText("[TITLE:Mélangeur de volume - Haut-parleurs / Casque (IDT High Definition Audio CODEC); CLASS:#32770]", "", "Static2") = "NomDuProgramme" Then
Global $pos_volume = ControlGetPos("[TITLE:Mélangeur de volume - Haut-parleurs / Casque (IDT High Definition Audio CODEC); CLASS:#32770]", "", "Static2")
MsgBox(0,"Position bouton muet du programme en question",$pos_volume[0]+30&","&$pos_volume[1]+172)
EndIf
J'ai réussi à trouver les coordonnées du bouton muet du programme que je veux rendre muet.
Et là je coince : comment à partir de coordonnées peut-on cliquer sur un control ?
Re: [..] Couper le son d'un programme
Posté : lun. 28 oct. 2013 12:29
par mikell
Pourquoi ne pas utiliser directement un ControlClick à la place du ControlGetPos puisque le ControlGetPos fonctionne ?
Code : Tout sélectionner
$Wnd = "[TITLE:Mélangeur de volume - Haut-parleurs / Casque (IDT High Definition Audio CODEC); CLASS:#32770]"
If ControlGetText($Wnd, "", "Static2") = "NomDuProgramme" Then
; Global $pos_volume = ControlGetPos($Wnd, "", "Static2")
ControlClick($Wnd, "", "Static2", "left")
Re: [..] Couper le son d'un programme
Posté : mar. 29 oct. 2013 16:09
par Utilisateur 4989 supprimé
Avec ton code, ça clique sur le texte "NomDuProgramme" mais ça ne coupe pas le son du programme.
Ce que j'essayais de faire c'est par le biais des coordonnées du control contenant le nom du programme, obtenir la class et l'instance du control du bouton muet pour ensuite faire un ControlClick sur ce bouton.
Re: [..] Couper le son d'un programme
Posté : jeu. 07 nov. 2013 11:50
par Utilisateur 4989 supprimé
J'ai réussi !
Code : Tout sélectionner
Run("C:\Windows\System32\SndVol.exe", "", @SW_MINIMIZE)
WinWait("Mélangeur de volume - Haut-parleurs / Casque (IDT High Definition Audio CODEC)")
For $idvolume = 1 To 100
If ControlGetText("[TITLE:Mélangeur de volume - Haut-parleurs / Casque (IDT High Definition Audio CODEC); CLASS:#32770]", "", "[CLASS:ToolbarWindow32; INSTANCE:" & $idvolume & "]") = "Réduire le volume de XXX au minimum" Then
ControlClick("[TITLE:Mélangeur de volume - Haut-parleurs / Casque (IDT High Definition Audio CODEC); CLASS:#32770]", "", "[CLASS:ToolbarWindow32; INSTANCE:" & $idvolume & "]", "left", 1)
EndIf
Next
Sujet résolu.