AppleScript obter aplicativo ativo


13

Como posso executar código (por exemplo display dialog("test")) usando AppleScript apenas se o aplicativo "Finder" estiver atualmente em foco / ativo.


Hum, se o aplicativo já estiver ativo, o que você pretende realizar ativando-o novamente?
Kent

stackoverflow.com/questions/3718520/… ocioso é relevante, embora não resolva o problema.
William William

Você precisa esclarecer sua pergunta. O script na minha resposta funciona, para uma determinada definição de 'funciona', isto é, informa com precisão se o Finder está ou não na frente.
Tetsujin

@Tetsujin atualizado
William

Como você está lançando o aplicativo Applescript? Ao clicar duas vezes, sempre mostrará o Finder como o '2º ao último' mais à frente. Alteração da resposta - isso funcionará se chamado do Editor de scripts, mas 'falhará' se clicar duas vezes no Finder, pois fornece um falso positivo
Tetsujin

Respostas:


18

Isso funcionará se o script for chamado no Editor de scripts, pois 'sai do caminho' para verificar o próximo aplicativo na linha, mas falhará se você clicar duas vezes no Finder, pois o Finder sempre será o último na fila.

tell application "System Events"
    set frontmostProcess to first process where it is frontmost
    set visible of frontmostProcess to false
    repeat while (frontmostProcess is frontmost)
        delay 0.2
    end repeat
    set secondFrontmost to name of first process where it is frontmost
    set frontmost of frontmostProcess to true
end tell

tell application (path to frontmost application as text)
    if "Finder" is in secondFrontmost then
        display dialog ("Finder was last in front")
    else
        display dialog (secondFrontmost & " was last in front")
    end if
end tell

Deixando aqui a resposta anterior para a posteridade

Resposta inteira renovada depois de não ter lido a pergunta corretamente inicialmente ;-)

tell application "System Events"
    set activeApp to name of first application process whose frontmost is true
    if "Finder" is in activeApp then
        display dialog ("test")
    else
        display dialog ("test2")
    end if
end tell

+1 Embora sua solução proposta não pareça funcionar como está. Eu recebo "teste" desde que o aplicativo esteja aberto e não necessariamente se estiver ativo ou não.
William

repensar… resposta editada
Tetsujin

reescrita completa, agora estou de volta à minha área de trabalho - isso agora faz exatamente o que você pediu.
Tetsujin

2
você também pode substituir o segundo comando de diálogo por display dialog (activeApp)para confirmar exatamente o que o script considera ser o mais frontal.
21415 Kent

1
Tenha cuidado com isso - alguns nomes de aplicativos de aplicativos (por exemplo, tell application "app_name") diferem dos nomes de processos (por exemplo, set frontmost of process "app_process" to true).
usar o seguinte
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.