1 votos

BigSur - ¿Consulta de los límites de cualquier ventana visible?

NOTA - Se han añadido más aclaraciones sobre esta cuestión. Ver " ACTUALIZACIÓN ", abajo.

¿Existe una forma en BigSur (versión 11.6) de consultar el dimensiones ¿los límites de cualquier ventana que se muestre en la pantalla?

Cuando se ejecuta bajo X Windows en linux, puedo ejecutar el xwininfo y haga clic en cualquier ventana abierta, y los atributos de la ventana, incluyendo su dimensiones límites, será la salida. ¿Existe un comando correspondiente para MacOS? Tenga en cuenta que no estoy ejecutando X Windows en mi Mac.

Muchas gracias de antemano.

ACTUALIZACIÓN : He mencionado lo siguiente en los comentarios, pero quiero añadirlo aquí también ahora, para que quede claro...

Hay casos en los que no conozco el nombre de la aplicación de la ventana cuyo dimensiones los límites que quiero consultar. Todo lo que veo es una ventana, y a veces, no hay ninguna indicación en la propia ventana sobre a qué aplicación pertenece la ventana. Si no conozco el nombre de la aplicación de una ventana determinada, ¿cómo puedo consultar el dimensiones ¿los límites de esa ventana en particular?

Además, hay otra cuestión: hay algunas ventanas que no son creadas por un *.app tipo de aplicación. Por ejemplo, cuando estoy usando el mpv programa para ver un vídeo, esa aplicación no es un *.app sino que es simplemente un ejecutable que ha sido instalado por Homebrew. Debido a esto, no hay manera de consultar los límites de su ventana utilizando el siguiente comando Applescript ...

tell application "mpv"
    set position to bounds of window 1
end tell

Este comando de Applescript falla con los Windows creados con no *.app programas del tipo mpv .

Estoy buscando una forma más general de consultar las dimensiones de las ventanas, incluso si no conozco el nombre de la aplicación que controla la ventana, e incluso si la aplicación no es un estándar *.app aplicación.

¿Hay alguna forma de hacerlo?

2voto

HippoMan Puntos 113

Basado en la muy útil respuesta de @jksoegaard, se me ocurrió esta solución en Python. Me da toda la información que quiero en formato JSON, que luego puede ser analizado e interpretado por cualquier otra pieza de software.

En primer lugar, es necesario instalar el py-applescript paquete, como sigue:

pip3 install py-applescript

Entonces, este es un programa que llamo wininfo ...

#!/usr/local/bin/python3

import os
import sys
import json
import applescript

prog = None
cmd  = 'tell Application "System Events" to get the {name,position,size} of every window of every process'

def main():
    s = applescript.AppleScript(cmd)
    output = s.run()
    stuff = zip(*output)
    info = []
    unnamed = 0
    for row in stuff:
        for item in zip(*row):
            if item[0]:
                name = item[0]
            else:
                name = f'unnamed-{unnamed:0>3}'
                unnamed += 1
            x = item[1][0]
            y = item[1][1]
            w = item[2][0]
            h = item[2][1]
            info.append(
                dict(
                    name=name,
                    x=x,
                    y=y,
                    w=w,
                    h=h
                )
            )
    print(json.dumps(info, indent=2))
    return 0

if __name__ == '__main__':
    prog = os.path.basename(sys.argv[0])
    sys.exit(main())

Los datos se envían en este formato a stdout ...

[
  {
    "name": "MyWindow",
    "x": 27,
    "y": 119,
    "w": 1005,
    "h": 633
  },
  {
    "name": "unnamed-000",
    "x": 0,
    "y": 0,
    "w": 1280,
    "h": 1
  },
  {
    "name": "unnamed-001",
    "x": 0,
    "y": 799,
    "w": 1280,
    "h": 1
  },
  {
    "name": "unnamed-002",
    "x": 1279,
    "y": 0,
    "w": 1,
    "h": 800
  },
  {
    "name": "unnamed-003",
    "x": 0,
    "y": 0,
    "w": 1,
    "h": 800
  },
  {
    "name": "Window",
    "x": 494,
    "y": 75,
    "w": 301,
    "h": 16
  }
]

1voto

Jose Chavez Puntos 645

Puedes utilizar AppleScript para obtener información de las ventanas de todos los procesos (sin importar si conoces el nombre de la aplicación, o si incluso es una "app"):

osascript -e 'tell application "System Events" to get the size of every window of every process'

Tenga en cuenta que, dependiendo de la versión de MacOS, es posible que tenga que ir a Configuración > Seguridad y Privacidad y dar permisos de accesibilidad a osascript/Terminal.app.

0voto

Marc Wilson Puntos 146

Claro. Applescript puede decírtelo.

Ejemplo:

tell application "Google Chrome"
    set position to bounds of window 1
end tell

Y el resultado es:

Result:
{180, 29, 1620, 1217}

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