2009-07-09 5 views
0

Fondamentalement, je veux exécuter une méthode de mon application chaque fois que quelque chose d'autre d'une autre application se produit. Je connais le nom de la méthode de l'autre application, je ne sais pas comment faire pour que mon application fasse quelque chose en réponse. Un gestionnaire d'entrée est-il la meilleure solution?Gestionnaire d'entrée dans Cocoa?

+0

Pouvez-vous donner le contexte? L'autre application vous envoie-t-elle un message? Quelle est l'autre application? Qu'allez-vous faire en réponse? –

+0

cela est possible, mais à moins que l'autre application a l'intention d'être observé, vous ne serez pas en mesure de faire beaucoup sans quelque désordre. Je ne pense pas qu'un gestionnaire d'entrée aidera ... –

+0

Si cela aide, je parle d'iPhone Simulator. Je veux que mon application fasse quelque chose en réponse à la rotation. Je connais les méthodes qu'il appelle quand il tourne (toggleRotationLeft:/toggleRotationRight :), je ne peux pas comprendre comment faire quelque chose en réponse à ce code. Merci! –

Répondre

0

Généralement n ° Vous ne pouvez le faire que si l'autre application publie un NSNotification ou expose autrement une API.

Sinon Pas très facilement ou gracieusement. Vous pouvez pirater quelque chose ensemble avec une combinaison de NSEvent globalMonitor et CGEventTap Soit on peut surveiller une condition où l'application active est celle que vous voulez (dans ce cas, le simulateur) et les raccourcis clavier pertinents ont été saisis.

Bien sûr, laisse le contrôle de l'élément de menu rotation ...

Une autre façon avec CGEvent, est de surveiller la taille de la fenêtre et faites attention au rapport. Nous savons que tous les appareils iOS, y compris les versions de simulateur, ont des formats non carrés. Nous savons que les fenêtres OS X ont une hauteur de barre de titre fixe. Vous pouvez interpréter la clé liste des fenêtres CGWindowkCGWindowOwnerPID et correspondre à la NSRunningApplicationprocessIdentifier puis essayez manuellement pour surveiller le changement dans la liste des fenêtres clés kCGWindowBounds Vous pouvez réduire la fréquence de vérification des limites de la fenêtre en regardant pour la souris des événements qui se produisent dans la zone de la barre d'outils OS X. Vous pouvez encore réduire ces valeurs à une distance x de MinX pour supposer qu'il ne s'agit pas d'autres menus. Ceci laisserait toujours la faille du contrôle complet du clavier allumé (beaucoup plus de choses à essayer et interpréter), ainsi que l'écart d'un événement de souris dans la barre de menus, suivi par des événements de clavier pour naviguer dans les menus . Enfin, vous pouvez essayer les API Accessibility (préfixe AX) pour mieux identifier les choses. Ceux-ci sont encore plus difficiles à utiliser. Mais comme les autres options, nécessitent généralement l'accessibilité est activée dans les Préférences Système. (sauf si vous êtes capable de courir en tant que root, ce qui n'est presque jamais une bonne idée).