Em um script, estou tentando encontrar a janela Terminal.app que contém um dispositivo tty específico e elevar essa janela para o topo. Aqui está o que eu tenho no Applescript até agora:
tell application "System Events"
set foundWin to false
if (name of processes) contains "Terminal" then
tell application "Terminal"
set theTabs to first tab of every window where tty is "$(tty)"
repeat with theTab in theTabs
if class of theTab is tab then
set theWin to (first window whose tabs contains theTab)
set selected tab of theWin to theTab
set foundWin to true
end if
end repeat
end tell
end if
if foundWin then
--RAISE THE WINDOW?!
end if
end tell
Onde estou ficando preso é a parte "levantando a janela".
Aqui estão algumas coisas que não são exatamente o que eu quero:
set frontmost of theWin to true
- isso leva a janela para a frente do grupo de janelas Terminal.app, mas não a eleva acima de outras janelas.
tell application "Terminal" to activate
- isso traz todas as janelas do Terminal para a frente em uma grande pilha. Eu só quero a uma janela.
tell application "System Events"
set theSysWin to first window of process "Terminal" whose name is (name of theWin)
perform action "AXRaise" of theSysWin
end tell
Isso quase faz, mas o que faz é elevar a janela do terminal para a posição # 2, ainda abaixo da janela ativa (se o aplicativo ativo for algo diferente de Terminal.app.)
click theSysWin at {10,50}
- parece não fazer nada.
click first static text of theSysWin
- parece não fazer nada.
Existe uma maneira de fazer isso? Não precisa estar no Applescript.
EDIT Encontrei esta página da web ( http://blog.coriolis.ch/2008/03/04/bring-any-window-to-the-front/ ) citando uma chamada Obj-C / Cocoa:
SetFrontProcessWithOptions(&psn, kSetFrontProcessFrontWindowOnly);
Eu não estou familiarizado com ObjC ou Cocoa, e isso é (em última instância) sendo invocado a partir de um script de shell, portanto, não tenho certeza para onde ir a partir daí.
fonte
SetFrontProcessWithOptions(&psn, kSetFrontProcessFrontWindowOnly);
não estou familiarizado o suficiente com objc ou cacau para saber para onde ir a partir daí.Você pode clicar nos itens de menu de aplicativos que não estão ativos. Use-o para clicar no item de menu correspondente à janela no menu Janela .
Isto é o que você precisa inserir no seu script:
Embora não ative o programa, a janela está na frente.
fonte
Sei que esse segmento é bastante antigo, mas eu o encontrei enquanto lutava contra o mesmo problema e outros podem também. Tanto quanto eu posso dizer, isso não pode ser feito em AppleScript bruto. No entanto, isso pode ser feito em AppleScriptObjC. Para usar o exemplo de @Daniel Beck, a nova versão seria assim.
O código adicionado usará a classe NSWorkspace da Cocoa para "iniciar" o aplicativo, o que eleva apenas a janela da frente do aplicativo para a frente com foco. Para obter mais detalhes sobre o processo que me levou a isso, tenho um artigo mais completo no meu site aqui .
fonte
Aqui está outra tentativa, testada no macOS High Sierra. Infelizmente, isso só funciona quando a janela especificada está na área de trabalho atual! A API AppleScript para controlar as janelas parece estar incompleta, tornando isso impossível.
Substitua "Safari" e "WhatsApp" pelo seu caso de uso.
Isso (visivelmente) eleva as janelas em duas etapas, no entanto. Primeiro, ele eleva a janela para o topo das janelas do aplicativo e somente depois para o topo de todas as janelas. Não é perfeito, mas funcional.
fonte