Je voudrais savoir s'il est possible d'identifier quel processus est responsable de la création / gestion d'une fenêtre sous Mac OS X.
Par exemple, lorsque plusieurs instances d'une application sont démarrées, comment puis-je obtenir l'ID de processus (PID) correspondant à une fenêtre spécifique? Ou s'il y a une fenêtre de dialogue modale sans titre, comment puis-je obtenir le PID de son propriétaire?
Je sais que sous Windows, il est possible d'utiliser l' outil Sysinternals Suite qui permet de rechercher une bibliothèque qui s'exécute avec certaines données.
Je recherche un mécanisme similaire à celui qui apparaît dans ce blog .
Dans ce cas, en utilisant Sysinternals Suite (et Process Explorer), ils ont trouvé la DLL / le programme qui utilisait la webcam en recherchant une DLL ou une sous-chaîne (dans ce cas, en utilisant le nom physique du périphérique).
Existe-t-il un mécanisme ou un programme, ou avez-vous une idée de la façon de rechercher quelque chose de similaire pour Mac OS X? Comment identifier quel processus a lancé une fenêtre?
Réponses:
J'ai utilisé le script Python . Ce n'est pas infaillible, mais cela fonctionne assez bien pour moi.
Je ne publierai pas le script complet sans autorisation, mais voici un résumé: il utilise
CGWindowListCopyWindowInfo
, qui est importé deQuartz
, pour collecter les informations de fenêtre du système, puis demande à l'utilisateur de déplacer la fenêtre souhaitée, puis recueille à nouveau les informations de fenêtre et affiche info pour ceux qui ont changé. Les informations sauvegardées incluent l'ID de processus, commekCGWindowOwnerPID
.Voici le code:
Le script imprime des informations pour la fenêtre qui a changé de position dans un intervalle de 5 secondes. La sortie ressemble donc à ceci:
la source
J'ai fait un outil nommé
lswin
Ensuite, vous pouvez utiliser grep pour trouver le pid de votre fenêtre.
Voici le code source du script:
la source
@kenorb J'ai combiné vos 2 versions du script, en gros cela fonctionne comme la première, montrant la différence mais le formatage est de la seconde. De plus, si la fenêtre n'est pas à l'écran - elle n'est pas imprimée, sinon elle donne trop de déchets
la source
pip install pyobjc-framework-Quartz