[NSWorkspace runningApplications]
에 의해 제공된 응용 프로그램 목록을 필터링하여 모든 응용 프로그램의 plist를 수동으로 UIAgent 키로 검사하지 않는 모든 데몬을 숨길 수 있습니까? 응용 프로그램이 독에 표시되지 않으면 관심이 없습니다.사용자 응용 프로그램 만 포함하도록 [NSWorkspace runningApplications]를 필터링하십시오. (데몬/UIAgents가 없음)
1
A
답변
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에서 아이콘과 같이 간단한 빠른 열거 루프를하고 각 NSRunningApplication
의 activationPolicy
을 확인하는 것입니다에만 잡아 처리하는 쉬운 방법 :
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
을 설정하여 응용 프로그램의 독 아이콘이 있는지 여부를 토글 할 수있는 설정이있는 응용 프로그램을 포착해야합니다.