Mac / Какао - Получение списка окон с помощью Доступности API

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

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

PS

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

AXUIElementRef app = AXUIElementCreateApplication(pid);

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

6
задан Ben Packard 17 September 2012 в 17:33
поделиться

3 ответа

Использование AxuilementCopyAttributevalues ​​ Чтобы скопировать значение для kaxwindowsattribute , который должен быть массивом объектов AxuElement, представляющих окна приложения.

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

3
ответ дан 8 December 2019 в 13:46
поделиться

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

2
ответ дан 8 December 2019 в 13:46
поделиться

Я не знаю способ получить идентификатор окна и PID из API доступности.
Метод NSWindow Laurent упомянул только идентификаторы окна, но не 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);  

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

12
ответ дан 8 December 2019 в 13:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: