2014-09-23 33 views

回答

3

更新:如果您使用的是Objective-C,下面我的原始答案仍然適用,但如果您使用的是Swift,則可以非常容易地執行,因爲Swift的filter函數適用於集合類型。

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

在類似Objective-C的東西可以與NSArray的各種斷言爲基礎,列舉方法進行,但他們會多一些囉嗦比雨燕對應。


我找到了一些搜索後的答案,但它的東西可能不會立即明顯。

一個簡單的方法,其具有在Dock圖標是做一個簡單的快速列舉迴路和檢查每個NSRunningApplicationactivationPolicy,像這樣只搶的過程:通常

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來切換應用程序的碼頭圖標的設置的應用程序。

相關問題