2017-03-20 3 views
1

현재 Mac 메뉴 표시 줄에있는 아이콘에 액세스하고 싶지만 관련 API 및 클래스를 찾는 데 문제가 있습니다.(MenuBar를 나타냄)을 보았지만 포함 된 메뉴 막대 응용 프로그램에 대한 공용 액세스를 제공하지 않습니다. 나는 각각 NSStatusItemNSStatusBarButton을 보았습니다.이 도구 상자는 메뉴 모음의 항목과 시각적 인 표현을 나타냅니다. 그러나 내가 발견 한 모든 것은 자신 만의 것입니다.현재 Mac 메뉴 막대에있는 아이콘 목록을 얻으려면 어떻게합니까?

Mac 메뉴 막대에 어떤 아이콘이 있는지 프로그래밍 방식으로 알 수 있으며 해당 응용 프로그램은 무엇입니까?

답변

0

이 정보를 직접 공개하는 공개 API는 없습니다.

내게 필요한 옵션 API를 사용하여 도구 모음 내에있는 개체 (y = 0)를 검색하고 각 개체의 소유자를 가져와 추측 할 수 있습니다. 그러나이 경우 응용 프로그램에 액세스 가능성 권한이 있어야합니다.이 권한은 사용자가 시스템 환경 설정에서 명시 적으로 활성화해야합니다.

0

당신은 크기와 좌표

CFArrayRef aList = CGWindowListCreate(kCGWindowListOptionOnScreenOnly|kCGWindowListExcludeDesktopElements, kCGNullWindowID); 
CFArrayRef aWindowsInfoArray = CGWindowListCreateDescriptionFromArray(aList); 

필터를 목록을 사용할 수 있습니다. kCGWindowOwnerName은 응용 프로그램의 이름을 포함합니다.

0

당신은있는 CoreGraphics에서 사용할 수있는 기능을 사용할 수 있습니다 :

let windowList = CGWindowListCopyWindowInfo([.optionOnScreenOnly], kCGNullWindowID) as! [[String: Any]] 

for window in windowList { 
    let boundsDict = window[kCGWindowBounds as String] as! CFDictionary 
    let applicationName = window[kCGWindowOwnerName as String] as! String 
    let windowName = window[kCGWindowName as String] as! String 

    if let bounds = CGRect(dictionaryRepresentation: boundsDict), bounds.origin.y == 0 { 
     print(applicationName, windowName, bounds) 
    } 
} 

는 테스트하는 동안, 내가 찾은 상태 표시 줄의 항목은 그 경계가 화면의 맨 고수들이라는 것을. 여러 화면 설정에서 테스트하지는 않습니다. 이 모든 작업에도 불구하고 상태 표시 줄 항목을 소유 한 응용 프로그램의 이름 만 있으면됩니다. 바에서 항목을 참조하는 NSStatusItem의 인스턴스를 만드는 방법을 찾지 못했습니다.