Estoy buscando escribir un script que genere una lista de todos los títulos de las ventanas de todos los programas que se ejecutan actualmente. ¿Hay alguna forma de hacer esto con AppleScript? Intenté ejecutar el siguiente código:
tell application "System Events"
repeat with theProcess in (every process)
if background only of theProcess is false then
say (name of theProcess) as string
end if
end repeat
end tell
Lo puse en un archivo llamado lawl.scpt
y luego ejecuté lo siguiente en la Terminal:
$ osascirpt lawl.scpt
Sin embargo, solo hace una pausa por unos segundos, luego sale sin generar nada.
macos
terminal
applescript
script
Claudiu
fuente
fuente
Respuestas:
El método sencillo y sencillo para lograr esto en AppleScript es:
Molesto, esto devuelve una lista anidada, que tendrás que recorrer en un
repeat with
bloque o aplanar el nido en una lista simple (que no es demasiado difícil).Ejecutar AppleScript desde la línea de comandos tiene la ventaja de que los datos devueltos están en formato de texto, que puede manipularse con bastante facilidad. Incluso puede utilizar la línea de comandos desde AppleScript para obtener los beneficios de cada uno:
que devuelve una buena lista de texto de títulos de ventanas.
Finalmente, aquí hay un AppleScript formal para hacer el trabajo correctamente, de una manera que le permita conservar la capacidad de hacer referencia al objeto de ventana si necesita obtener otras propiedades o manipularlo:
La lista resultante es una lista de registros que tienen la estructura de
property R
. Cada registro representa una sola ventana, que contiene el título de la ventana y el nombre del proceso al que pertenece, por ejemplo{WindowTitle:"Downloads", AttachedToProcess:"Finder"}
. De esta manera, es fácil hacer cosas con la ventana, como:fuente
background only
sería algo como esto:get the name of every window of (every process whose class of windows contains window)
.