Comment puis-je utiliser du Cacao l'API d'Accessibilité pour détecter qu'une fenêtre est mise à l'avant?
Je suis en utilisant l'API d'Accessibilité pour détecter lorsqu'une application s'ouvre windows, la fermeture de windows, lorsque les fenêtres sont déplacés ou redimensionnés, ou le fait principal et/ou concentré. Toutefois, l'application cliente qui semble se déplacer d'une fenêtre à l'avant sans l'API d'Accessibilité avis
déclenché.
Comment mon application peut détecter quand une autre application apporte une fenêtre à l'avant, sans en faire la clé?
Je suis l'espoir de trouver une solution qui fonctionne sur OS X 10.4 et 10.5
Plus d'infos:
Je suis à l'aide de ces états à l'instant. Ils fonctionnent très bien lorsque l'utilisateur sélectionne manuellement une fenêtre pour l'amener à l'avant. Mais il se complique pas de travail lors de l'application elle-même est en train d'amener la fenêtre à l'avant.
AXObserverAddNotification(observer, element, kAXMainWindowChangedNotification, 0);
AXObserverAddNotification(observer, element, kAXFocusedWindowChangedNotification, 0);
Vous devez vous connecter pour publier un commentaire.
Je n'ai pas à vous abonner à la fenêtre courante changements, mais vous pouvez demander à l'accessibilité de l'API de l'application en cours, et les applications actuelles de la plupart des avant-plan de la fenêtre.
Imaginez que vous avez une classe appelée CurrentAppData, avec les données suivantes:
Le code pour trouver l'application actuelle ressemble à quelque chose comme ceci:
Dans cet exemple, le _systemWide variable est initialisée dans les classes de fonction init comme:
_system = AXUIElementCreateSystemWide();
La fonction de classe valueOfExistingAttribute ressemble à ceci:
La fonction précédente a été prise à partir de l'Apple UIElementInspector exemple, qui est aussi une excellente ressource pour l'apprentissage au sujet de l'Accessibilité de l'API.
Dans Mac OS X, les applications et les fenêtres sont des choses totalement distinctes, avec des applications contenant windows; ils ne sont pas auparavant-la-même-chose que dans Microsoft Windows. Vous avez besoin de détecter l'activation et la désactivation de chaque application.
Vous pourrez le faire que par l'observation de la
kAXApplicationActivatedNotification
etkAXApplicationDeactivatedNotification
. L'objet de ces notifications est l'application d'être activé et désactivé. Vous aurez également besoin de détecter des applications de lancement et de cesser de fumer; vous pouvez le faire en utilisant le Gestionnaire de Processus ou NSWorkspace. Deux de ces Api peuvent vous donner une ID de processus que vous pouvez utiliser pour créer un AXApplication objet.Prendre un coup d'oeil à iChatStatusFromApplication exemple dans la documentation du développeur. C'est exactement ce dont vous avez besoin 🙂
Ce sujet NSAccessibilityFocusedUIElementChangednotification?