Как получить информацию о программе из списка окон с помощью CGWindowListCopyWindowInfo

#cocoa #nswindow

#cocoa #nswindow

Вопрос:

Мне удалось получить список окон на рабочем столе с помощью CGWindowListCopyWindowInfo, но в следующий раз нужно попытаться получить свойства окна, такие как название программы, title и другие свойства.

На какой API мне следует обратить внимание и есть ли у нас какой-либо пример того, как это сделать?

Ответ №1:

Перечислите окна и извлеките конкретную информацию при циклическом просмотре:

 NSMutableArray *windows = (NSMutableArray *)CGWindowListCopyWindowInfo(kCGWindowListOptionOnScreenOnly | kCGWindowListExcludeDesktopElements, kCGNullWindowID);

for (NSDictionary *window in windows) {
    NSString *owner = [window objectForKey:@"kCGWindowOwnerName" ];
    NSString *name = [window objectForKey:@"kCGWindowName" ];
    NSLog(@"%@ - %@",owner,name);
}
  

Доступные ключи:

 kCGWindowIsOnscreen
kCGWindowLayer 
kCGWindowMemoryUsage
kCGWindowName
kCGWindowNumber
kCGWindowOwnerName
kCGWindowOwnerPID
kCGWindowSharingState
kCGWindowStoreType
  

Комментарии:

1. Как насчет получения информации, например, что это за программа, например, браузер, и если это браузер, получить список истории и т.д.

2. Таким образом невозможно получить «тип приложения». Однако вы можете проверить kCGWindowOwnerName agains заранее определенный массив, содержащий все браузеры. Пример массива: NSArray *browsers = [[NSArray alloc] initWithObjects:@"Safari", @"Firefox", @"Chrome", @"Opera", nil]; Проверка примера: [browsers containsObject:theOwnerName]; . Получение истории браузера полностью отличается для каждого браузера.

3. Нужно ли мне делать релиз для Windows? [выпуск для Windows];