Faça o AppleScript esperar que um aplicativo termine de carregar

7

Eu tenho um applescript para iniciar meu ambiente de trabalho, mas tenho um pequeno problema com ele. Eu quero que o script lance vários programas e, em seguida, os oculte, uma vez iniciados. O código parece com isso atualmente:

tell application "Firefox" to activate

delay 0.5

tell application "Finder"
  set visible of process "Firefox" to false
end tell

Obviamente, delay 0.5 é apenas um espaço reservado, o ideal é que eu queira ocultar o programa assim que ele terminar o carregamento. Infelizmente, meus tempos de carregamento variam muito (de 0,2 a 5s). Existe algo como um retorno de chamada ou uma função para monitorar os eventos de aplicativos?

    
por Christian Macht 03.09.2012 / 20:22

2 respostas

6

Consulte o status de visibilidade em um loop, repetindo para defini-lo como invisível até que funcione:

set appname to "Firefox"
tell application appname to launch
tell application "System Events"
    repeat until visible of process appname is false
        set visible of process appname to false
    end repeat
end tell

Monitorando o log de eventos do AppleScript Editor, é óbvio que isso pode levar algumas tentativas; o seguinte foi repetido 1490 vezes quando eu tentei com o Xcode:

set visible of process "Xcode" to false
get visible of process "Xcode"
    --> true

Antes de finalmente funcionar:

set visible of process "Xcode" to false
get visible of process "Xcode"
    --> false
    
por 03.09.2012 / 21:16
2

Normalmente, você não precisa adicionar nenhum atraso, mas, nesse caso, mesmo que você defina a propriedade visibile como false, ela será definida como true depois que o aplicativo terminar a abertura. Então você não pode verificar seu valor ou se o processo existe.

Você pode usar launch ou open -jg para abrir um aplicativo sem janelas visíveis. launch abre uma nova janela se o aplicativo não estiver aberto antes. open -jg abre uma nova janela se o aplicativo estiver aberto, mas não tiver janelas visíveis.

set b to "com.apple.TextEdit"
tell application "System Events"
    if bundle identifier of processes contains b then
        launch application id b
    else
        do shell script "open -jgb " & b
    end if
end tell

Alguns aplicativos como o Alfred, o Growl, o nvALT, o The Unarchiver e o X11 não funcionaram com nenhum deles. Você pode precisar apenas adicionar um atraso fixo antes de definir visible como falso.

    
por 04.09.2012 / 08:18