Applescript: “não é possível obter o grupo de guias 1 da janela” (El Capitan)

5

A seguir, um AppleScript que eu uso para alterar os dispositivos de saída de áudio:

tell application "System Preferences"
    activate
    set current pane to pane "com.apple.preference.sound"
end tell


tell application "System Events"
    tell application process "System Preferences"
        tell tab group 1 of window "Sound"
            click radio button "Output"
            if (selected of row 2 of table 1 of scroll area 1) then
                set selected of row 1 of table 1 of scroll area 1 to true
                set deviceselected to "Headphones"
            else
                set selected of row 2 of table 1 of scroll area 1 to true
                set deviceselected to "MX279"
            end if
        end tell
    end tell
end tell
tell application "System Preferences" to quit

Funcionou em Yosemite, mas quando atualizei para o El Capitan, ele estava me dando o seguinte erro:

"System Events got an error: Can't get tab group 1 of window \"Sound\" of application process \"System Preferences\". Invalid index"

Eu não estou familiarizado com o AppleScript, então qualquer idéia de por que isso possa estar acontecendo será muito apreciada.

gdavtor
fonte

Respostas:

8

Na primeira parte do seu script, você carrega o Soundpainel de preferências. Pode acontecer que o painel não esteja totalmente carregado antes de você enviar comandos para ele na segunda parte do script. O erro diz que o tab group 1(aquele que contém a Outputguia) não existe no momento em que você está tentando acessá-lo.

Para garantir que tab group 1exista, podemos esperar com estas duas linhas:

repeat until exists tab group 1 of window "Sound"
end repeat

O script completo:

tell application "System Preferences"
    activate
    set current pane to pane "com.apple.preference.sound"
end tell


tell application "System Events"
    tell application process "System Preferences"
        repeat until exists tab group 1 of window "Sound"
        end repeat
        tell tab group 1 of window "Sound"
            click radio button "Output"
            if (selected of row 2 of table 1 of scroll area 1) then
                set selected of row 1 of table 1 of scroll area 1 to true
                set deviceselected to "Headphones"
            else
                set selected of row 2 of table 1 of scroll area 1 to true
                set deviceselected to "MX278"
            end if
        end tell
    end tell
end tell
tell application "System Preferences" to quit
Arthur
fonte
Isso faz sentido, obrigado! Você sabe por que isso funcionou por cerca de 9 meses e só agora começou a agir? Atraso no sistema do El Capitan, talvez?
Gdavtor # 6/15
Boa pergunta. Para ser sincero, não sei.
6165 Arthur
Você tem alguma entrada para esta pergunta? apple.stackexchange.com/questions/217148/…
bmike
Se você usar "janela 1" em vez de " 'som' janela para se referir à janela, que também irá palavra em sistemas que correm um sistema não Inglês.
zıəs uɐɟəʇs