En un script, estoy tratando de encontrar la ventana Terminal.app que contiene un dispositivo tty específico y subir esa ventana a la parte superior. Esto es lo que tengo en Applescript hasta ahora:
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
Donde me estoy atorando es la parte de "elevar la ventana".
Aquí hay algunas cosas que no son exactamente lo que quiero:
set frontmost of theWin to true
- Esto lleva la ventana al frente del grupo de ventanas Terminal.app pero no la eleva por encima de ninguna otra ventana.
tell application "Terminal" to activate
- Esto trae todas las ventanas de Terminal al frente en una gran pila. Solo quiero la única ventana.
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
Esto casi lo hace, pero lo que hace es elevar la ventana de terminal a la posición n. ° 2, aún debajo de la ventana activa (si la aplicación activa no es Terminal.app).
click theSysWin at {10,50}
- No parece hacer nada.
click first static text of theSysWin
- No parece hacer nada.
¿Hay alguna forma de hacer esto? No tiene que estar en Applescript.
EDITAR Encontré esta página web ( http://blog.coriolis.ch/2008/03/04/bring-any-window-to-the-front/ ) citando una llamada de Obj-C / Cocoa:
SetFrontProcessWithOptions(&psn, kSetFrontProcessFrontWindowOnly);
No estoy familiarizado con ObjC o Cocoa, y esto (en última instancia) se invoca desde un script de shell, por lo que no estoy seguro de a dónde ir desde allí.
fuente
SetFrontProcessWithOptions(&psn, kSetFrontProcessFrontWindowOnly);
no estoy lo suficientemente familiarizado con objc o cocoa sin embargo, saber a dónde ir desde allí.Puede hacer clic en los elementos del menú de aplicaciones que no están activas. Úselo para hacer clic en el elemento de menú correspondiente a la ventana en el menú Ventana .
Esto es lo que necesita insertar en su script:
Si bien no activa el programa, la ventana está en primer plano.
fuente
Me doy cuenta de que este hilo es bastante antiguo, pero lo encontré mientras luchaba contra el mismo problema y otros también pueden hacerlo. Por lo que puedo decir, no se puede hacer en AppleScript sin formato. Sin embargo, se puede hacer en AppleScriptObjC. Para usar el ejemplo de @Daniel Beck, la nueva versión sería así.
El código agregado utilizará la clase NSWorkspace de Cocoa para "iniciar" la aplicación, lo que eleva solo la ventana frontal de esa aplicación hacia el frente con foco. Para obtener más detalles sobre el proceso que me llevó a esto, tengo una descripción más detallada en mi sitio web aquí .
fuente
Aquí hay otro intento, probado en macOS High Sierra. ¡Ay, esto solo funciona cuando la ventana dada está en el escritorio actual! La API de AppleScript para controlar ventanas parece estar incompleta, lo que hace que esto sea imposible.
Sustituya "Safari" y "WhatsApp" por su caso de uso.
Sin embargo, esto (visiblemente) eleva las ventanas en dos pasos. Primero eleva la ventana a la parte superior de las ventanas de la aplicación, y solo entonces la eleva a la parte superior de todas las ventanas. No perfecto, pero funcional.
fuente