Mac / Cocoa - получение списка окон с использованием API специальных возможностей - PullRequest
6 голосов
/ 21 января 2010

Я хочу использовать Accessibility API, чтобы получить список всех окон для данного приложения (внешний).

Цель - проверить, открыто ли определенное окно. Сначала я проверяю, что приложение работает (используя [NSWorkspace runningApplications] и проверяя каждое из них), а затем я хочу проверить текст строки заголовка каждого окна, открытого для этого приложения.

PS

Таким образом, я могу создать элемент для приложения, используя PID:

AXUIElementRef app = AXUIElementCreateApplication(pid);

а что мне с этим делать? Я даже иду в правильном направлении? Не могу поверить, что так сложно найти примеры.

Ответы [ 3 ]

11 голосов
/ 21 января 2010

Я не знаю, как получить идентификатор окна и PID из API доступа.
Метод NSWindow, о котором упоминал Лоран, предоставляет только идентификаторы окна, но не PID приложения-владельца окна.
Я бы использовал методы CGWindowList, которые доступны с 10.5.
Чтобы получить список идентификаторов окон и PID владельца, вы можете попробовать следующее:

CFArrayRef windowList = CGWindowListCopyWindowInfo(kCGWindowListOptionOnScreenOnly, kCGNullWindowID);
for (NSMutableDictionary* entry in (NSArray*)windowList) 
{
    NSString* ownerName = [entry objectForKey:(id)kCGWindowOwnerName];
    NSInteger ownerPID = [[entry objectForKey:(id)kCGWindowOwnerPID] integerValue];
    NSLog(@"%@:%d", ownerName, ownerPID);
}
CFRelease(windowList);  

Вы можете контролировать, хотите ли вы все окна (включая закадровые, ...) с помощью параметра paramter.
Также объекты ввода содержат гораздо больше информации. Ссылка на документацию

3 голосов
/ 22 января 2010

Используйте AXUIElementCopyAttributeValues, чтобы скопировать значение для kAXWindowsAttribute, которое должно быть массивом объектов AXUIElement, представляющих окна приложения.

Как можно догадаться из названия функции, оно следует правилу копирования .

2 голосов
/ 21 января 2010

Вы можете использовать windowNumbersWithOptions: . В нем перечислены все окна из всех приложений по их номеру. Но я не могу найти, как получить NSWindow из номера окна ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...