Фильтруйте [NSWorkspace runningApplications], чтобы он содержал только пользовательские приложения (без демонов /UIAgents)

Есть ли способ отфильтровать список приложений, заданных [NSWorkspace runningApplications] скрыть все демоны и т. д., кроме проверки вручную списков приложений для ключа UIAgent? Если приложение не отображается в доке, меня это не интересует.

1 ответ

Решение

ОБНОВЛЕНИЕ: Если вы используете Objective-C, мой оригинальный ответ ниже по-прежнему применяется, но если вы используете Swift, это может быть очень легко выполнено более аккуратно, благодаря Swift filter функция для типов коллекции.

let workspace = NSWorkspace.sharedWorkspace()
let apps = workspace.runningApplications.filter { (app) -> Bool in
    return app.activationPolicy == .Regular
};

В Objective-C нечто подобное можно сделать с помощью различных методов предикатов и перечисления NSArray, но они будут немного более многословны, чем их Swift-аналог.


Я нашел ответ после некоторых поисков, но это может быть не сразу очевидно.

Простой способ захватить только процессы, имеющие значки в Dock, - выполнить простой быстрый цикл перечисления и проверить каждый NSRunningApplication"s activationPolicy, вот так:

NSWorkspace *workspace = [NSWorkspace sharedWorkspace];
NSArray *apps = [workspace runningApplications];

for (NSRunningApplication *a in apps) {
    if (a.activationPolicy == NSApplicationActivationPolicyRegular) {
        // Do stuff here
    }
}

Как правило, приложения с обычными окнами и иконки док-станции используют NSApplicationActivationPolicyRegular, Дополнения меню и приложения типа Альфреда NSApplicationActivationPolicyAccessory, Демоны и т. Д. Без какой-либо видимости пользователя NSApplicationActivationPolicyProhibited, Эти константы соответствуют ключам LSUIElement и LSBackgroundOnly в Info.plist каждого приложения.

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

Другие вопросы по тегам