Получение уникального идентификатора для окна другого приложения - PullRequest
4 голосов
/ 23 ноября 2008

Я новичок в разработке Cocoa и разрабатываю свое первое приложение. Я хочу прочитать уникальный идентификатор из любого окна любого приложения - будь то какао или углерод. Приложения какао делают свои идентификаторы окон доступными для AppleScript (хотя я уверен, что есть гораздо лучший способ сделать это через правильный маршрут Objective C), но я пытаюсь получить доступ к идентификаторам окон из документов в приложениях Adobe. Это кажется намного сложнее. Все, что я могу найти в справочных библиотеках, это HIWindowGetCGWindowID :

"Эта функция возвращает идентификатор окна, назначенный оконным сервером при создании окна. Идентификатор окна обычно не используется с любой другой функцией Carbon, но может использоваться с другими функциями Mac OS X, для которых требуется идентификатор окна, такие как функции в OpenGL. "

Можно ли это использовать для получения идентификатора из моей программы? Или это просто функция, которую можно использовать в одном приложении?

Если бы кто-то мог указать мне правильное направление, я был бы вечно благодарен.

1 Ответ

10 голосов
/ 23 ноября 2008

Функция HIWindowGetCGWindowID() может возвращать CGWindowID только для одного из окон вашего приложения, поскольку WindowRef из другой программы не будет действительным в вашем.

Функция CGWindowListCopyWindowInfo() из CGWindow.h будет возвращать массив словарей, по одному на каждое окно, которое соответствует заданным вами критериям, в том числе в других приложениях. Он позволяет фильтровать только по окнам над данным окном, окнам под данным окном и «экранными» окнами, но возвращаемый словарь содержит идентификатор процесса для приложения-владельца, который можно использовать для сопоставления окна с приложением. В каждом возвращаемом словаре ключ kCGWindowNumber будет указывать на идентификатор окна как CFNumber. Существует также функция CGWindowListCreate(), которая возвращает только массив CGWindowID с. В основном нет документации для этих функций, кроме заголовка CGWindow.h и примера кода Son of Grab . Кроме того, это только 10,5.

...