Existe-t-il un moyen de trouver le nom de l'application de la fenêtre active à un moment donné sur Mac OS X en utilisant Python?Recherche de la fenêtre active sous Mac OS X avec Python
Répondre
Cela devrait fonctionner:
#!/usr/bin/python
from AppKit import NSWorkspace
activeAppName = NSWorkspace.sharedWorkspace().activeApplication()['NSApplicationName']
print activeAppName
fonctionne que sur Leopard ou Tiger si vous avez PyObjC installé et arrive à pointer vers le binaire python droite ligne un (pas le cas si vous avez installé universel MacPython, que vous voudriez probablement faire sur Tiger). Mais la réponse de Peter avec la méthode Carbon sera probablement un peu plus rapide, car importer quelque chose d'AppKit en Python prend du temps, ou plus exactement, importer quelque chose d'AppKit pour la première fois dans un processus Python prend un certain temps.
Si vous en avez besoin dans une application PyObjC, ce que je décris fonctionnera très bien et rapidement, puisque vous ne rencontrez qu'une seule fois le retard d'importation d'AppKit. Si vous avez besoin de cela pour fonctionner en tant qu'outil de ligne de commande, vous remarquerez que les performances ont été atteintes. Si cela vous intéresse, il est probablement préférable de construire un outil de ligne de commande de 10 lignes dans Xcode en utilisant le code de Peter comme point de départ.
Tout d'abord, voulez-vous 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 également été vrai pour Windows depuis quelques années maintenant, bien que je n'ai aucune idée de ce que l'API ressemble pour cela.)
Deuxièmement, carbone ou cacao?
Pour obtenir la fenêtre active à Cocoa:
window = NSApp.mainWindow()
Pour obtenir le nom de votre processus à Cocoa:
appName = NSProcessInfo.processInfo().processName()
Edit: Oh, je pense que je sais ce que vous voulez. Le nom du processus le plus en avant, non?
Je ne pense pas qu'il y ait une façon de le faire à Cocoa, mais voici comment le faire en carbone dans C:
ProcessSerialNumber psn = { 0L, 0L };
OSStatus err = GetFrontProcess(&psn);
/*error check*/
CFStringRef processName = NULL;
err = CopyProcessName(&psn, &processName);
/*error check*/
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 même possible. Python n'a pas de pointeurs, ce qui rend cette tâche difficile.
Je sais PyObjC se traduirait par ce dernier argument CopyProcessName
en err, processName = CopyProcessName(…)
, mais les liaisons de carbone ne reposent pas sur PyObjC (ils font partie du noyau Python 2), et je ne sais pas ce que vous faites sur le PSN d'une manière ou d'une autre.
J'avais besoin de l'application frontale courante dans un script Python qui arrange bien les fenêtres sur mon écran (voir move_window
).
Bien sûr, le crédit complet revient à Peter! Mais voici le programme complet:
#include <Carbon/Carbon.h>
int main(int, char) {
ProcessSerialNumber psn = { 0L, 0L };
OSStatus err = GetFrontProcess(&psn);
CFStringRef processName = NULL;
err = CopyProcessName(&psn, &processName);
printf("%s\n", CFStringGetCStringPtr(processName, NULL));
CFRelease(processName);
}
Construire avec gcc -framework Carbon filename.c
Comment est-ce une réponse pour python? – GreenAsJade
Également pas pour Python, mais pour la nouvelle automatisation JavaScript de Yosemite, vous pouvez utiliser '$ .NSWorkspace.sharedWorkspace.activeApplication.objectForKey ('NSApplicationName') .UTF8String;'. Vous devez d'abord importer ceci: 'ObjC.import ('AppKit')'. – SirVer
La méthode dans la réponse acceptée a été dépréciée dans OS X 10.7+.La version actuelle recommandée est la suivante:
from AppKit import NSWorkspace
active_app_name = NSWorkspace.sharedWorkspace().frontmostApplication().localizedName()
print(active_app_name)
Cela aide vraiment! Comment pouvons-nous obtenir le titre de la fenêtre active? –
Je sais qu'il est possible de le faire en utilisant AppleScript (en l'appelant via osascript en Python), mais à ma connaissance, il n'y a pas de moyen simple de le faire en Python. Voici un lien pour vérifier les informations que vous pouvez récupérer en utilisant Cocoa: https://developer.apple.com/library/mac/documentation/Cocoa/Reference/ApplicationKit/Classes/NSWorkspace_Class/index.html#//apple_ref/occ/instm/NSWorkspace/frontmostApplication – kmundnic
À l'origine, nous utilisions AppleScript pour obtenir le titre de la fenêtre en cours, ce qui fonctionnait parfaitement. Mais cela n'a pas fonctionné si nous avons signé l'application. Et puis j'ai trouvé une API native dans Quartz pour le faire, et cela a résolu notre problème. –
- 1. Utiliser virtualenv sous Mac OS X
- 2. Pas de détection Sous Mac OS X
- 3. Initialiser le code de la fenêtre Mac OS X
- 4. Paramètre DHCP sous Mac OS X
- 5. Version Python avec Mac OS X Snow Leopard?
- 6. Ocaml sous Mac OS X donne une erreur de bus
- 7. Comment remapper la touche "Menu contextuel" sous Mac OS X?
- 8. JInternalFrame ne maximise pas complètement sous Mac OS X
- 9. Qt4Dotnet sur Mac OS X
- 10. Réinstallation/Bibliothèque/Python sous OS X Leopard
- 11. Cycle de vie de l'applet sous Mac OS X
- 12. Comment ouvrir automatiquement une fenêtre de terminal sous Mac OS X
- 13. Comment installer le cadre de Cogen python coroutine sous Mac OS X
- 14. Comportement étrange - Navigateur SWT sous Mac OS X
- 15. Échange de vue Mac OS X
- 16. Java Applet, AWT Refresh, problème sous Mac OS X 10.4
- 17. Recherche de chemins de lecteur USB sous Mac OS 10.4
- 18. Configuration du serveur d'application "Simple" sous Mac OS X Server?
- 19. Où est PyGTK pour Mac OS X?
- 20. Comment installer Python Imaging Library sur Mac OS X?
- 21. Mac OS X: charge moyenne
- 22. SWT et Java WebStart sous Mac OS X 10.5
- 23. Comment émuler le comportement 'cp --update' sous Mac OS X?
- 24. Où et comment définir l'environnement DYLD sous Mac OS X
- 25. Extrait des fichiers Cache.db sous Mac OS X Leopard
- 26. Rechargement d'Apache2 via Terminal sous MAC OS X
- 27. Alternative à FinalBuilder pour Mac OS X?
- 28. les problèmes d'autorisations sous Mac OS X Tiger Server
- 29. Sous-dossier pour site Web sur Mac OS X
- 30. Qu'est-ce qu'un fichier * .rsd sous Mac OS X?
Que devons-nous importer pour obtenir NSApp et NSProcessInto? – GreenAsJade
@ GreenAsJade: En allant par la réponse de Dirk, vraisemblablement Foundation et AppKit. –