Trouver la Fenêtre Active dans Mac OS X à l'aide de Python
Est-il un moyen de trouver le nom de l'application de la fenêtre active à un moment donné sur Mac OS X à l'aide de Python?
Vous devez vous connecter pour publier un commentaire.
Est-il un moyen de trouver le nom de l'application de la fenêtre active à un moment donné sur Mac OS X à l'aide de Python?
Vous devez vous connecter pour publier un commentaire.
Cela devrait fonctionner:
Ne fonctionne que sur Leopard, ou sur Tiger si vous avez PyObjC installé et arrive à point à droite python binaire en ligne (pas le cas si vous avez installé universelle MacPython, qui vous voudrez probablement faire sur Tiger). Mais la réponse de Pierre avec le Carbone de façon de faire, ce sera probablement un peu plus rapide, depuis l'importation de quelque chose de AppKit en Python prend un certain temps, ou, plus précisément, de l'importation de quelque chose de AppKit pour la première fois dans un Python processus prend un certain temps.
Si vous avez besoin de ce à l'intérieur d'un PyObjC application, ce que je décris sera parfait et rapide, puisque vous ne vivez le gal de l'importation de AppKit une fois. Si vous avez besoin d'un outil en ligne de commande, vous remarquerez que les performances. Si c'est pertinent pour vous, vous êtes probablement mieux de la construction d'un 10 ligne de la Fondation outil de ligne de commande Xcode l'aide de Pierre de code comme un point de départ.
La méthode dans l'acceptation de réponse a été déprécié dans OS X 10.7+. L'actuelle version recommandée serait le suivant:
Tout d'abord, voulez-vous de la fenêtre ou le nom de l'application? Ce n'est pas Windows—un processus d'application sur Mac OS X peut avoir plusieurs fenêtres. (En outre, cela a aussi été le cas de Windows depuis quelques années maintenant, mais je n'ai aucune idée de ce que l'API ressemble à ça).
Deuxième, de Carbone ou de Cacao?
Pour obtenir la fenêtre active dans le Cacao:
Pour obtenir le nom de votre processus en Cacao:
Edit: Oh, je pense que je sais ce que vous voulez. Le nom de la première de processus, droit?
Je ne pense pas qu'il y a un moyen de le faire dans le Cacao, mais voici comment le faire en Carbone dans C:
N'oubliez pas de
CFRelease(processName)
lorsque vous avez terminé avec elle.Je ne suis pas sûr de ce que cela va ressembler en Python, ou si c'est encore possible. Python n'a pas de pointeurs, ce qui le rend difficile à.
Je sais PyObjC serait de traduire le dernier argument de
CopyProcessName
enerr, processName = CopyProcessName(…)
, mais le Carbone, les liaisons ne comptez pas sur PyObjC (ils font partie de la base de Python 2), et je ne suis pas sûr de ce que vous faites sur le PSN, de toute façon.CFRelease
n'est pas nécessaire avec PyObjC. PyObjC poignées d'appel qui, pour vous, autant que je sache.J'avais besoin de l'actuelle application au premier plan dans un script Python qui arrange les fenêtres bien sur mon écran (voir
move_window
).Bien sûr, le crédit va à Pierre! Mais voici le programme complet:
Construire avec
gcc -framework Carbon filename.c
$.NSWorkspace.sharedWorkspace.activeApplication.objectForKey('NSApplicationName').UTF8String;
. Vous devez importer ce premier bien:ObjC.import('AppKit')
.