/ / Est-il possible de surveiller une autre application utilisant Cocoa sur Mac? - objectif-c, macos, cacao

Est-il possible de surveiller une autre application utilisant Cocoa sur Mac? - objectif-c, macos, cacao

Par exemple, obtenez la notification qu'une autre application devient active à l'écran ou démissionnez de l'état actif.

Réponses:

7 pour la réponse № 1

Sûr. Dans votre classe de délégué d’application, vous pouvez utiliser NSWorkspace pour être averti quand une application devient active (NSWorkspaceDidActivateApplicationNotification) ou démissionne actif (NSWorkspaceDidDeactivateApplicationNotification). Voir la documentation sur NSWorkspace pour plus d'informations.

Dans votre classe de contrôleur, vous feriez quelque chose comme ceci:

- (id)init {
if ((self = [super init])) {
[[[NSWorkspace sharedWorkspace] notificationCenter] addObserver:self
selector:@selector(appDidActivate:)
name:NSWorkspaceDidActivateApplicationNotification
object:nil];
}
return self;
}

- (void)dealloc {
[[[NSWorkspace sharedWorkspace] notificationCenter] removeObserver:self];
[super dealloc];
}

- (void)appDidActivate:(NSNotification *)notification {
NSDictionary *userInfo = [notification userInfo];
NSLog(@"userInfo == %@", userInfo);

}

Les points clés sont essentiellement la nécessité de s’inscrire pour recevoir les notifications comme indiqué -init. Vous devez répéter le code pour ajouter un autre observateur pour chaque nom de notification supplémentaire souhaité (par exemple, NSWorkspaceDidDeactivateApplicationNotification).

Une autre chose importante à retenir est de vous retirer en tant qu'observateur -dealloc (ou ailleurs), de sorte que NSWorkspace n’essaye pas de notifier votre objet contrôleur après qu’il a été publié + dealloc "d (et ne serait plus valide).

Dans le spécifié -appDidActivate: méthode, faites ce que vous devez avec les informations sur l'application en question.


0 pour la réponse № 2

Si vous voulez quelque chose de plus simple que objets distribués, vous pouvez utiliser les notifications distribuées dele centre de notification distribué. Cependant, ceux-ci ne sont pas publiés sauf si vous avez créé l'application. Pour surveiller le démarrage ou la fermeture des applications, vous pouvez utiliser NSWorkspace et son centre de notification (suggéré par NSGod).