2010-05-11 7 views
0

Quel est le mécanisme par lequel peut programmatique être lancé une application à la suite d'un autre être lancé?Comment lancer une application dépendante sur OS X?

E.g. lors du lancement d'iTunes, le bureau Last.fm se lance aussi.

Ou il est juste une question de la substitution d'un « fichier batch » de quelque sorte?

Note: OS X débutant.

Répondre

2

Il n'y a aucun moyen standard pour spécifier une application dépendante. Donc, vous devez en quelque sorte regarder le système. Vous n'avez pas à interroger activement; vous devez utiliser un mécanisme du système pour vous le dire.

à surveiller une application GUI pour lancer, vous devez écrire une application de fond, obtenir le centre de notification NSWorkspace par

NSNotificationCenter* nc=[[NSWorkspace sharedWorkspace] notificationCenter]; 

et regarder pour NSWorkspaceDidLaunchApplicationNotification. Voir le Apple doc.

à surveiller une application non-GUI pour lancer, vous devez utiliser kqueue. (Ceci est une fonctionnalité BSD.) Voir le man page. En général, vous devez regarder launchd à fork ou execve processus. Notez qu'il existe plusieurs launchd processus, une pour racine et un pour chaque utilisateur connecté.

Dans tous les cas, vous devez démarrer automatiquement l'application de fond que vous écrivez. Il y a plusieurs façons de le faire.

Pour regarder un fichier ou un répertoire pour changer, vous pouvez utiliser launchd agents. Voir le man page. D'ailleurs: l'application officielle Last.fm, lors de son premier lancement, installe AudioScrobbler.bundle à l'intérieur ~/Library/iTunes/iTunes Plug-ins. iTunes lit tous les plug-ins au lancement et le plug-in lance alors l'application Last.fm. C'est un usage plutôt hackish, non-toléré de l'interface, parce que le plug-in est pour le visualiseur. Voir Apple doc.

+0

Je ne pouvais pas comprendre comment faire de la page de manuel dont vous parlez. Pourriez-vous développer sur celui-ci? Mais +1 pour la diminution des effectifs "last.fm"! – jldupont

+0

Ah, désolé pour mettre l'information de confusion ... 'agents launchd' peut surveiller l'apparition de nouveaux fichiers dans un répertoire, mais il ne peut pas surveiller le lancement d'une nouvelle application. Vous pouvez utiliser 'kqueue', mais ce n'est pas une façon élégante ... Je vais ajouter les informations sur kqueue. – Yuji

+0

Encore, merveilleuses informations pour un débutant OS X ... merci! – jldupont

Questions connexes