Получение списка запущенных приложений, упорядоченных по последнему использованию - PullRequest
14 голосов
/ 03 июня 2009

Я бы хотел получить список запущенных приложений в том же порядке, в котором они отображаются при выполнении ⌘ + ⇥

т.е. если я использую TextEdit , затем Предварительный просмотр , затем iCal , заказ будет

  1. 1012 * ческих *
  2. Preview
  3. TextEdit

Использование [[NSWorkspace sharedWorkspace] launchedApplications] не работает, поскольку приложения сортируются по дате запуска / идентификатору процесса. Перечисление с GetNextProcess также не работает, так как оно также упорядочено pid.

Регистрация для уведомлений и ведение списка самостоятельно - это не вариант, так как я должен знать список сразу после запуска приложения. Ну, на самом деле, первого элемента списка было бы достаточно, но я думаю, что это почти тот же вопрос.

Есть ли какой-нибудь API для получения этой информации?

Ответы [ 4 ]

19 голосов
/ 04 августа 2009

Может быть, что-то вроде этого:

cd /System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework
nm LaunchServices | grep __LSCopyApplicationArrayInFrontToBackOrder
3 голосов
/ 03 июня 2009

Вам необходимо зарегистрироваться для получения уведомлений об изменении активного приложения, как указано здесь: http://www.unsanity.org/archives/000045.php

Как только это будет сделано, вы сможете легко поддерживать массив активных приложений, отсортированных по последнему активному времени.

2 голосов
/ 03 июня 2009

Невозможно получить список до запуска вашего приложения. Однако после запуска приложения вы можете просто зарегистрироваться для получения уведомлений и поддерживать собственный массив приложений.

Единственное решение - запустить фоновый процесс при входе в систему с помощью launchd, который просто прослушивает приложения.

1 голос
/ 04 августа 2009

Попробуйте перечислить список окон с помощью API-интерфейсов Accessibility или CGWindowList. Я уверен, что приложения не являются окнами в Mac OS X, но порядок их расположения должен определяться порядком их передних окон.

Вам, конечно, нужно будет игнорировать процессы, из которых вы уже видели окна (то есть рассматривать только их передние окна).

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