Usando o AutoHotKey para alterar a fonte de saída de áudio?

3

Eu tenho duas saídas de áudio principais na minha máquina: as caixas de som e um fone de ouvido USB. Atualmente, no Windows 7 Professional x64, eu digito "som" no menu Iniciar pesquisa para abrir esta caixa de diálogo:

Eusómepreocupocomasduasprincipaisopçõesparaospropósitosdestaquestão.GostariadesaberseexisteumamaneiranoAutoHotKeydealternarde"Alto-falantes (Headset USB 4- Sennheiser)" para "Alto-falantes (Áudio de alta definição VIA)" para evitar ter que abrir essa caixa de diálogo toda vez que eu quiser mudar. Obrigado!

    
por Scott 03.07.2012 / 03:27

3 respostas

4

Eu encontrei uma resposta graças à ajuda do iglvzx, apontando a terminologia correta para usar!

; Toggles default audio device in Control Panel (switches between headset and speakers).
ScrollLock:: 
  toggle:=!toggle ;toggles up and down states. 
  Run, mmsys.cpl 
WinWait,Sound
if toggle
  ControlSend,SysListView321,{Down 1}
Else
  ControlSend,SysListView321,{Down 2}
ControlClick,&Set Default
ControlClick,OK 
return

ScrollLock é a chave que eu pressiono. toggle é uma variável que o AutoHotKey mantém (até onde eu posso dizer) que a condicional abaixo usa. mmsys.cpl é a janela mostrada acima (digite em Executar para ver por si mesmo!). O restante dos comandos lidam com a manipulação da interface do usuário, desde selecionar a parte correta da janela até a simulação de "cliques" até clicar em "Definir padrão" (deve corresponder ao idioma atual) para clicar em OK (idem).

Quando isso for executado, você observará a janela aparecer fisicamente por meio segundo enquanto ela é executada fisicamente e seleciona tudo. Embora eu prefira uma opção sem janela, isso funciona bem, já que o foco é retornado para a janela correta (mesmo jogos em tela cheia) depois de ser executado.

    
por 04.07.2012 / 02:54
0

Acabei de ajustar um script por "aafe". Trabalha com várias saídas e ciclos através deles:

; Audio Output Default cycle
ScrollLock:: 
    Run,mmsys.cpl
    WinWait,YOURSOUNDWINDOWNAME
    loop,20 ; Exits loop after 20 runs. Good if there's just one output.
    {
        ControlSend,SysListView321,{Down}
        ControlGet,isEnabled,Enabled,,&YOURSETDEFAULTBUTTONNAME
        if(!isEnabled)
        {
            break
        }
    }
    ControlSend,SysListView321,{Down}
    ControlGet, isEnabled, Enabled,, &YOURSETDEFAULTBUTTONNAME
    if(!isEnabled)
    {
        ControlSend,SysListView321,{Home}
    }
    ControlClick,&YOURSETDEFAULTBUTTONNAME
    ControlClick,OK
    WinWaitClose
    SoundPlay, *-1
return

Altere o texto em maiúsculas para o nome da janela de som e o nome do botão "Definir padrão". Mantenha o "! &"

    
por 21.04.2013 / 15:24
0

Aqui está uma solução que faz um loop em todos os dispositivos de áudio e excluirá os que você não deseja, como S / PDIF ou Saída digital usando a tecla Windows + Shift + W.

#+w::
IfWinExist Sound
{
    WinKill Sound
}
Run rundll32.exe shell32.dll',Control_RunDLL mmsys.cpl',',0 

WinWait,Sound 
IfWinNotActive,Sound WinActivate,Sound 
WinWaitActive,Sound

ControlSend,SysListView321,{Home}  
x := 1
totalDevicesCount := 0
isSecondLoop := false
isEnabled := false
;    ControlGet, isEnabled, Enabled,,&Set Default 
ControlGet, totalDevicesCount, List, Count, SysListView321 
; isEnabled AND 
StringCaseSense Off
loop 
{ 
    ControlGet, Current, List, Selected, SysListView321
    if(InStr(Current, "default device") OR x > totalDevicesCount)
    {
        break
    }
    x := x + 1
    ControlSend,SysListView321,{Down}  
} 

if (x >= totalDevicesCount) 
{
    ControlSend,SysListView321,{Home}
    x := 1 
} 

loop 
{ 
    ControlGet, Current, List, Selected, SysListView321
    ControlGet, isEnabled, Enabled,,&Set Default 
    ; msgbox %x% %isEnabled% %Current%

    ; exclude output option with the name specified
    if(InStr(Current, "Realtek Digital Output"))
    {
        isEnabled := false
    }

    if (x >= totalDevicesCount AND not isEnabled)
    {
        ControlSend,SysListView321,{Home}
        x := 1
        isSecondLoop := true
        ; msgbox breaking now %x% %totalDevicesCount% %isEnabled% %isSecondLoop%
        break
    }
    if (x > totalDevicesCount OR isEnabled)
    {
        ; msgbox breaking now %x% %totalDevicesCount% %isEnabled% %isSecondLoop%
        break
    }
    if (x >= totalDevicesCount AND isSecondLoop)
    {
        ; infinite loop breaker if no devices avaliable
        ; msgbox breaking sec %x% %totalDevicesCount% %isEnabled% %isSecondLoop%
        break
    }

    ControlSend,SysListView321,{Down}
    x := x + 1
} 


;ControlGet, Current, List, Selected, SysListView321 
;msgbox %Current% 
Sleep 100
ControlClick,&Set Default 
ControlClick,OK 
;    SoundPlay *48 
WinKill Sound

return

Eu modifiquei este script postado por dan112123 neste fórum: link

    
por 21.06.2014 / 19:03