1 votes

BigSur - Interroger les limites d'une fenêtre visible ?

NOTE - Cette question a été clarifiée. Voir " MISE À JOUR ", ci-dessous.

Existe-t-il un moyen, dans BigSur (version 11.6), d'interroger la base de données des les dimensions des limites de toute fenêtre affichée à l'écran ?

Lorsque je travaille sous X Windows dans linux, je peux exécuter la commande xwininfo et cliquez sur n'importe quelle fenêtre ouverte, et les attributs de la fenêtre, y compris son nom et son adresse, s'afficheront. les dimensions seront produites. Existe-t-il une commande correspondante pour MacOS ? Notez que je n'utilise pas X Windows sur mon Mac.

Je vous remercie d'avance.

MISE À JOUR : J'ai mentionné ce qui suit dans les commentaires, mais je tiens à l'ajouter ici aussi, pour plus de clarté ...

Il y a des cas où je ne connais pas le nom de l'application de la fenêtre dont le nom a été modifié. les dimensions limites que je souhaite interroger. Tout ce que je vois, c'est une fenêtre, et parfois, il n'y a aucune indication sur la fenêtre elle-même quant à l'application à laquelle elle appartient. Si je ne connais pas le nom de l'application à laquelle appartient une fenêtre donnée, comment puis-je interroger les les dimensions de cette fenêtre particulière ?

Il existe également un autre problème : certaines fenêtres ne sont pas créées par un système normal. *.app la demande de type. Par exemple, lorsque j'utilise le mpv programme pour visionner une vidéo, cette application n'est pas un *.app Il s'agit plutôt d'un exécutable qui a été installé par Homebrew. Pour cette raison, il n'y a aucun moyen d'interroger les limites de sa fenêtre à l'aide de la commande Applescript suivante ...

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

Cette commande Applescript échoue avec les fenêtres créées avec des caractères non *.app des programmes de type mpv .

Je cherche un moyen plus général d'interroger les dimensions des fenêtres, même si je ne connais pas le nom de l'application qui contrôle la fenêtre, et même si l'application n'est pas une application standard. *.app l'application.

Existe-t-il un moyen de le faire ?

2voto

HippoMan Points 202

En me basant sur la réponse très utile de @jksoegaard, j'ai trouvé cette solution Python. Elle me donne toutes les informations que je veux au format JSON, qui peut ensuite être analysé et interprété par n'importe quel autre logiciel.

Tout d'abord, il est nécessaire d'installer le logiciel py-applescript comme suit :

pip3 install py-applescript

Ensuite, voici un programme que j'appelle 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())

Il transmet des données dans ce format à 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 Points 645

Vous pouvez utiliser AppleScript pour obtenir des informations sur les fenêtres de tous les processus (que vous connaissiez ou non le nom de l'application, ou qu'il s'agisse même d'une "application") :

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

Notez que selon la version de MacOS, vous devrez peut-être aller dans Réglages > Sécurité et confidentialité et donner les permissions d'accessibilité à osascript/Terminal.app.

0voto

Marc Wilson Points 3640

Bien sûr, Applescript peut vous le dire.

Exemple :

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

Et le résultat est là :

Result:
{180, 29, 1620, 1217}

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X