Wie kann ich mit Cocoa die Accessibility-API, um zu erkennen, dass ein Fenster in den Vordergrund?
Ich bin mit der Accessibility API zu erkennen, Wann eine bestimmte Anwendung öffnen öffnet den windows -, schließt die Fenster, wenn das Fenster verschoben, vergrößert oder verkleinert oder aus Haupt-und/oder fokussiert werden. Jedoch ist die client-app scheint ein Fenster zu verschieben nach vorne, ohne eine Accessibility-API Meldung
abgefeuert.
Wie kann meine Anwendung festzustellen, wenn eine andere Anwendung bringt ein Fenster nach vorne, ohne den Schlüssel?
Ich bin der Hoffnung zu finden, eine Lösung, die funktioniert auf OS X 10.4 und 10.5
Mehr info:
Ich bin mit diesen Aussagen im moment. Sie funktioniert gut, wenn der Benutzer manuell wählt ein Fenster, um es nach vorne. Aber es doens T Arbeit, wenn die app selbst bringt das Fenster in den Vordergrund.
AXObserverAddNotification(observer, element, kAXMainWindowChangedNotification, 0);
AXObserverAddNotification(observer, element, kAXFocusedWindowChangedNotification, 0);
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich habe nicht in der Lage, zu abonnieren, um aktuelle Fenster ändert, aber Sie können Fragen, die accessibility-API, die für die aktuelle Anwendung, und die aktuellen Anwendungen vorderen Fenster.
Stellen Sie sich vor Sie haben eine Klasse namens CurrentAppData, mit den folgenden Daten:
Den code zu finden, der aktuellen Anwendung wie folgt aussieht:
In diesem Beispiel die _systemWide variable initialisiert wurde in den Klassen, die init-Funktion wie:
_system = AXUIElementCreateSystemWide();
Die Funktion Klasse valueOfExistingAttribute sieht wie folgt aus:
Vorherigen Funktion war genommen aus dem Apple UIElementInspector Beispiel, das ist auch eine große Ressource für das lernen über die Accessibility-API.
In Mac OS X, Anwendungen und windows sind völlig voneinander getrennte Dinge sind, mit Anwendungen, die mit windows; Sie sind nicht früher-die-gleiche-Sache wie bei Microsoft Windows. Sie müssen erkennen, das die Aktivierung und Deaktivierung der jeweiligen Anwendung.
Werden Sie tun, dass durch die Beobachtung für
kAXApplicationActivatedNotification
undkAXApplicationDeactivatedNotification
. Das Objekt dieser Mitteilungen wird die Anwendung aktiviert und deaktiviert werden. Sie müssen auch erkennen, Anwendungen starten und beenden; Sie können dies tun, mit dem Prozess-Manager oder NSWorkspace. Beide APIs können geben Sie eine Prozess-ID, die Sie verwenden können, um eine AXApplication Objekt.Werfen Sie einen Blick auf iChatStatusFromApplication Beispiel in der Entwickler-Dokumentation. Es ist genau das, was Sie brauchen 🙂
Was NSAccessibilityFocusedUIElementChangednotification?