CGWindowID от AXUIElement - PullRequest
       12

CGWindowID от AXUIElement

6 голосов
/ 16 ноября 2009

Я пытаюсь автоматизировать стороннее приложение OSX, используя API специальных возможностей.Некоторое состояние приложения недоступно через API, поэтому я получаю его с помощью скриншота экрана.Для этого мне нужно получить CGWindowID для объекта доступности с «оконной ролью».

Есть ли прямой способ получения CGWindowID объекта «оконной роли»?Я могу получить это эвристически, сопоставляя различные атрибуты окна, такие как размер, заголовок и местоположение, но это действительно смешно, и я чувствую себя лучше, если мое приложение будет также поддерживать угловые случаи, даже если они маловероятны.

Ответы [ 2 ]

8 голосов
/ 09 марта 2012

Существует функция, по крайней мере, от Leopard и выше (и все еще около 10.7.3):

extern "C" AXError _AXUIElementGetWindow(AXUIElementRef, CGWindowID* out);

Обычные предостережения об использовании чего-то подобного применимы, хотя. Это может измениться, как только следующее обновление ОС!

4 голосов
/ 20 ноября 2009

Нет способа сделать это; иерархия доступности полностью отделена от фактической иерархии окон / представлений. Я думаю, что ваше соответствие будет работать лучше.

...