Ответ 1
Возможно, что-то вроде этого:
cd /System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework
nm LaunchServices | grep __LSCopyApplicationArrayInFrontToBackOrder
Я хотел бы получить список запущенных приложений в том же порядке, что и при выполнении ⌘ + ⇥
т.е. если я использую TextEdit, затем Предварительный просмотр, затем iCal, порядок
Использование [[NSWorkspace sharedWorkspace] launchedApplications]
не работает, поскольку приложения сортируются по дате запуска/идентификатору процесса. Перечисление с помощью GetNextProcess
не работает, так как оно также упорядочивается с помощью pid.
Регистрация для уведомлений и сохранение списка сами по себе не является вариантом, так как я должен знать список сразу после запуска приложения. Ну, первого элемента списка было бы достаточно на самом деле, но я думаю, что это почти такой же вопрос.
Есть ли какой-нибудь API для получения этой информации?
Возможно, что-то вроде этого:
cd /System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework
nm LaunchServices | grep __LSCopyApplicationArrayInFrontToBackOrder
Вам необходимо зарегистрироваться для уведомлений при изменении активного приложения, как описано здесь: http://www.unsanity.org/archives/000045.php
Как только это будет сделано, легко поддерживать массив активных приложений, отсортированных по последнему активному времени.
Невозможно получить список до запуска приложения. После запуска приложения вы можете просто зарегистрироваться для уведомлений и поддерживать свой собственный массив приложений.
Единственное решение - запустить фоновый процесс при входе в систему с помощью запуска, который просто прослушивает приложения.
Попробуйте перечислить список окон с API-интерфейсом Accessibility или CGWindowList. Приложения не являются окнами в Mac OS X, так как я уверен, что вы знаете, но порядок приложений сверху до конца должен определяться положением "спереди-назад" их передних окон.
Вам, конечно, нужно будет игнорировать процессы, которые вы уже видели в Windows (т.е. рассматривайте только их передние окна).