2014-09-23 8 views

답변

3

업데이트 : Objective-C를 사용하는 경우 아래의 원래 답변이 계속 적용되지만 Swift를 사용하는 경우 Swift의 filter 콜렉션 유형 기능 덕분에 더욱 쉽게 수행 할 수 있습니다. 유사한 목표 - C 뭔가에

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

가있는 NSArray의 다양한 술어 기반 열거 방법으로 수행 할 수 있습니다,하지만 그들은 자신의 신속한 대응보다 조금 더 장황한 수 있습니다.


일부 검색 후에 답변을 찾았지만 즉시 분명하지 않을 수 있습니다.

Dock에서 아이콘과 같이 간단한 빠른 열거 루프를하고 각 NSRunningApplicationactivationPolicy을 확인하는 것입니다에만 잡아 처리하는 쉬운 방법 :

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

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

을 일반적으로 정상적인 윈도우와 애플리케이션 도크 아이콘은 NSApplicationActivationPolicyRegular입니다. 메뉴 엑스트라 및 알프레드 유형 응용 프로그램은 NSApplicationActivationPolicyAccessory을 사용합니다. 데몬 등 사용자가 전혀 보이지 않는 곳은 무엇이든 NSApplicationActivationPolicyProhibited을 사용하십시오. 이 상수는 각 응용 프로그램의 Info.plist에있는 LSUIElement 및 LSBackgroundOnly 키와 일치합니다.

이 접근법은 사용자가 동적으로 activationPolicy을 설정하여 응용 프로그램의 독 아이콘이 있는지 여부를 토글 할 수있는 설정이있는 응용 프로그램을 포착해야합니다.