0 votos

Cómo listar todas las ventanas de una aplicación que están abiertas en todos los escritorios

Me gustaría poder generar una lista, y con suerte acceder una por una, de todas las ventanas abiertas de cualquier aplicación específica sin importar en qué escritorio se encuentren, junto con el espacio de trabajo del escritorio (espacio de control de la misión) en el que se encuentra cada una.

En general, AppleScript y otras herramientas de Apple parecen ser capaces de listar sólo aquellas que son visibles en el Espacio de Trabajo del Escritorio activo (lo que parece bastante tonto y como si Apple internamente no supiera realmente cómo utilizar la función de Mission Control).

Muchas aplicaciones tienen un menú de Windows que enumera todas las ventanas abiertas de esa aplicación, pero eso parece que tendría que tener macros específicas para gestionar las listas de cada aplicación diferente. Eso no es lo ideal. Y no es completo, porque esas listas dentro de la aplicación simplemente enumeran el título de la ventana, el nombre del archivo o lo que sea y no el espacio de trabajo del escritorio.

En concreto, para empezar, quiero listar todas las ventanas abiertas de TextEdit y todas las ventanas abiertas de Typora. Tienen UIs muy diferentes para mostrar esa lista ellos mismos.

Eventualmente, me gustaría tener una pequeña ventana de aplicación en la esquina de cada espacio de trabajo de escritorio que muestre un nombre u otra identificación para ese espacio de escritorio. Entonces podría cambiar a un escritorio diferente activando esa ventana de aplicación y poniéndola en segundo plano.

Lo más significativo es que esto me permitiría cambiar a la el mismo escritorio de trabajo incluso si he reordenado el orden de los escritorios en Mission Control (porque la ventana de destino se movería con todo el escritorio). Normalmente, Mission Control cambia la numeración de los escritorios y las teclas de acceso rápido asignadas apuntan al escritorio que se encuentre en esa posición numérica. En mi opinión, este es uno de los principales defectos de Mission Control que ha impedido que la gente lo utilice ampliamente.

Hasta ahora he encontrado el método/función JSX de Apple $.CGWindowListCopyWindowInfo(16, 0)

El primer argumento establece algunos filtros en los datos devueltos. Aquí 16 es el valor de la constante $.kCGWindowListExcludeDesktopElements que excluye los iconos del escritorio, el propio escritorio y algunas otras "ventanas" que no se pueden ver. El segundo argumento es un ID de ventana para poder seleccionar las ventanas que están delante o detrás de esa ventana específica, así 0 muestra todas las ventanas.

Este método suele arrojar cientos de elementos que necesitan ser filtrados y masajeados. Esta es una entrada formateada por js-beautify:

$({
    "kCGWindowLayer": $(0),
    "kCGWindowAlpha": $(1),
    "kCGWindowMemoryUsage": $(1248),
    "kCGWindowSharingState": $(1),
    "kCGWindowOwnerPID": $(1410),
    "kCGWindowNumber": $(322),
    "kCGWindowOwnerName": $("TextEdit"),
    "kCGWindowStoreType": $(1),
    "kCGWindowBounds": $({
        "X": $(0),
        "Height": $(679),
        "Y": $(23),
        "Width": $(385)
    }),
    "kCGWindowName": $("Which Apps Have I Used.rtf")
}),

En este ejemplo, el kCGWindowBounds colóquelo en el margen izquierdo de la pantalla, en la parte superior (inmediatamente debajo de la barra de herramientas), un poco más alto que ancho. Bien. Pero no me dice que en Mission Control está en Desktop 16 .

Si tuviera varias pantallas, podría averiguar en qué pantalla estaba porque esos valores tratan todas las pantallas diferentes como un único escritorio. Un X de más de 1440 (el ancho de la pantalla de mi portátil) lo pondría en el monitor a la derecha de mi portátil, si éste estuviera más a la izquierda.

Pero, ¿CÓMO puedo determinar en qué espacio de trabajo del escritorio de Mission Control se encuentra esa ventana de aplicación concreta? Especialmente, ¿cómo puedo determinar eso para un número de Windows, sin tener que activar e ir a cada ventana para averiguar qué escritorio está activo ahora?

Hay algunas aplicaciones que han podido hacer algo así en el pasado, en particular HyperSpace y CurrentKey, pero HyperSpace no funcionaba más allá de OSX 10.11 y CurrentKey se ha retirado debido a las limitaciones de tiempo en el apoyo a una aplicación gratuita y la incapacidad de apoyar el sistema operativo Monterey.

.

¿Alguna idea?

1voto

Marc Wilson Puntos 146

Relacionado con esto: https://stackoverflow.com/a/67338053/13100156

Encontré que ninguno de los códigos de ejemplo producía un resultado cuando lo ejecutaba en script Editor (en Monterey), pero el segundo ejemplo script funciona bien bajo TextMate.

enter image description here

Es interesante que esto cuente con dos ventanas para Todoist, pero sólo una es visible. Cuenta cuatro ventanas para Preview, pero sólo dos son visibles. No estoy muy seguro de a qué se debe esto. La única ventana visible en el espacio en el que lo ejecuté fue TextMate.

El ejemplo no muestra los escritorios en los que están los Windows, pero sería un comienzo para ti.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X