Получение уникального идентификатора для окна другого приложения
Я новичок в разработке Cocoa и разрабатываю свое первое приложение. Я хочу прочитать уникальный идентификатор из любого окна любого приложения - будь то какао или углерод. Приложения какао делают свои идентификаторы окон доступными для AppleScript (хотя я уверен, что есть гораздо лучший способ сделать это через правильный маршрут Objective C), но я пытаюсь получить доступ к идентификаторам окон из документов в приложениях Adobe. Это кажется намного сложнее. Все, что я могу найти в справочных библиотеках, это HIWindowGetCGWindowID:
"Эта функция возвращает идентификатор окна, назначенный оконным сервером при создании окна. Идентификатор окна, как правило, бесполезен с любой другой функцией Carbon, но может использоваться с другими функциями Mac OS X, для которых требуется идентификатор окна, такими как функции в OpenGL."
Можно ли это использовать для получения идентификатора из моей программы? Или это просто функция, которую можно использовать в одном приложении?
Если бы кто-то мог указать мне правильное направление, я был бы вечно благодарен.
1 ответ
Функция HIWindowGetCGWindowID() может возвращать только CGWindowID для одного из окон вашего приложения, поскольку WindowRef из другой программы не будет действительным в вашем.
Функция CGWindowListCopyWindowInfo() из CGWindow.h будет возвращать массив словарей, по одному на каждое окно, которое соответствует заданным вами критериям, в том числе в других приложениях. Он позволяет фильтровать только по окнам над данным окном, окнам под данным окном и "экранным" окнам, но возвращаемый словарь содержит идентификатор процесса для приложения-владельца, который можно использовать для сопоставления окна с приложением. В каждом возвращаемом словаре ключ kCGWindowNumber будет указывать на идентификатор окна в виде CFNumber. Существует также функция CGWindowListCreate(), которая возвращает только массив CGWindowID. В основном нет документации для этих функций, кроме заголовка CGWindow.h и примера кода "Сын Захвата ". Кроме того, это только 10,5.