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?
Répondre
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 CGWindow
kCGWindowOwnerPID
et correspondre à la NSRunningApplication
processIdentifier
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).
- 1. Référence parent dans Cocoa
- 2. Fonctions auxiliaires dans Cocoa
- 3. Callbacks dans ObjC + Cocoa
- 4. Objets partagés dans Cocoa
- 5. File Watcher dans Cocoa
- 6. Gestionnaire d'événements dans JQuery
- 7. Cocoa et Cocoa Touch: un objet dans le dictionnaire?
- 8. Compte à rebours dans Cocoa
- 9. Boutons d'interface graphique dans Cocoa
- 10. Coulée d'objets dans Cocoa touch
- 11. Observation de soi dans Cocoa
- 12. Utilisation de NSThreads dans Cocoa?
- 13. registerClientScriptBlocage dans un gestionnaire personnalisé?
- 14. gestionnaire d'événements OnTaskFailed dans SSIS
- 15. Gestionnaire global PreviewKeyDown vs gestionnaire local PreviewKeyDown
- 16. Cocoa -/+ déclarations
- 17. NSLevelIndicator - Cocoa
- 18. Événement + gestionnaire
- 19. (id) vs (NSSomeObject *) dans Objective-C/Cocoa?
- 20. Cocoa: Confus par #define dans le code?
- 21. Concevoir un modèle-contrôleur dans Cocoa?
- 22. Comment changer le menu principal dans Cocoa?
- 23. Chiffrer les ressources dans l'application Cocoa?
- 24. Accéder au contrôleur dans une application Cocoa
- 25. Réglage des performances dans l'application Cocoa
- 26. Exécution d'un serveur socket dans Cocoa
- 27. Comment obtenir la date actuelle dans Cocoa
- 28. Jouer des sons purs dans Cocoa Touch
- 29. Implémentation de "curseurs scrubby" dans Cocoa?
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? –
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 ... –
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! –