2014-09-23 35 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来切换应用程序的码头图标的设置的应用程序。

相关问题