Immer eine eindeutige ID für ein Fenster einer anderen Anwendung
-
10-07-2019 - |
Frage
Ich bin ein Neuling Cocoa-Entwickler und ich meine erste Anwendung zu entwickeln. Ich möchte eine eindeutige Kennung von jedem Fenster von jeder Anwendung lesen - ob zum Thema Kakao oder Kohlenstoff. Cocoa-Anwendungen machen ihren Fenster-IDs zu Applescript zur Verfügung (obwohl ich bin sicher, es ist ein viel besserer Weg, dies durch eine richtige Objective C Route zu tun), aber ich versuche, Fenster-IDs von Dokumenten in den Adobe-Anwendungen zuzugreifen. Dies scheint viel schwieriger zu sein. Alles, was ich scheinen in den Referenzbibliotheken zu finden ist HIWindowGetCGWindowID :
"Mit dieser Funktion das Fenster ID durch das Fenster Server zugewiesen zurückgibt, wenn ein Fenster erstellt wird. Die Fenster-ID mit jedem anderen Carbon-Funktion im allgemeinen nicht nützlich, sondern kann mit anderen Mac OS X-Funktionen verwendet werden, die ein Fenster ID erfordern, wie Funktionen in OpenGL. "
Kann diese verwendet werden, um die Identifikation von meinem Programm zu bekommen? Oder ist es nur eine Funktion, die innerhalb einer Anwendung verwendet werden kann?
Wenn jemand mich in die richtige Richtung zeigen könnte, würde ich ewig dankbar sein.
Lösung
Die Funktion HIWindowGetCGWindowID()
kann nur ein CGWindowID
zurückkehrt für einen Ihrer App-Fenster, da ein WindowRef
aus einem anderen Programm in Ihnen nicht gültig sein.
Die Funktion CGWindowListCopyWindowInfo()
von CGWindow.h wird eine Reihe von Worten zurückkehren, eine für jedes Fenster, das die Kriterien entspricht, die Sie festgelegt, darunter auch solche in anderen Anwendungen. Es können nur Sie durch Fenster über ein bestimmtes Fenster filtern, Fenster unter einem gegebenen Fenster und „Bildschirm“ Fenster, aber das Wörterbuch zurück umfasst einen Prozess-ID für den Besitz App, die Ihnen passen Fenster zu App nutzen können. In jedem zurück Wörterbuch wird die kCGWindowNumber
Schlüssel zum Fenster-ID als CFNumber
zeigen. Es gibt auch eine CGWindowListCreate()
Funktion, die nur eine Reihe von CGWindowID
s zurückgibt. Es gibt im Grunde keine Dokumentation für diese Funktionen über den CGWindow.h Header und die Son of Code Schnappen Probe. Außerdem ist es 10.5 nur.