[NSWorkspace runningApplications]
UIAgent キーの各アプリケーションの plist を手動でチェックする以外に、すべてのデーモンなどを非表示にするために指定されたアプリケーションのリストをフィルタリングする方法はありますか? アプリケーションが Dock に表示されない場合、私はそのアプリケーションに興味がありません。
1 に答える
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
このアプローチは、動的に設定することで、ユーザーがアプリケーションのドック アイコンの存在を切り替えることができる設定を持つアプリケーションをキャッチする必要があります。