2

[NSWorkspace runningApplications]UIAgent キーの各アプリケーションの plist を手動でチェックする以外に、すべてのデーモンなどを非表示にするために指定されたアプリケーションのリストをフィルタリングする方法はありますか? アプリケーションが Dock に表示されない場合、私はそのアプリケーションに興味がありません。

4

1 に答える 1

5

filter更新: Objective-C を使用している場合、以下の元の回答が引き続き適用されますが、Swift を使用している場合は、コレクション型に対するSwift の機能のおかげで、これをより簡単に実行できます。

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

Objective-C では、NSArray のさまざまな述語ベースの列挙メソッドを使用して同様のことを行うことができますが、Swift の対応するメソッドよりも少し長くなります。


いくつかの検索の後に答えを見つけましたが、それはすぐにはわからないかもしれません.

Dock にアイコンがあるプロセスのみを取得する簡単な方法は、単純な高速列挙ループを実行し、次のようにそれぞれNSRunningApplicationのをチェックすることです。activationPolicy

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

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

通常、通常のウィンドウとドック アイコンを持つアプリケーションは、NSApplicationActivationPolicyRegular. メニュー エクストラと Alfred タイプのアプリケーションはNSApplicationActivationPolicyAccessory. ユーザーの可視性がないデーモンなどは、 をまったく使用しませんNSApplicationActivationPolicyProhibited。これらの定数は、各アプリケーションの Info.plist 内の LSUIElement および LSBackgroundOnly キーに対応しています。

activationPolicyこのアプローチは、動的に設定することで、ユーザーがアプリケーションのドック アイコンの存在を切り替えることができる設定を持つアプリケーションをキャッチする必要があります。

于 2014-09-23T18:17:16.290 に答える