2014-05-24 2 views
4

코코아/AppKit에서 [NSScreen screens]의 화면이 주어진 경우 특정 화면에서 전체 화면 앱이 실행되고 있는지 어떻게 알 수 있습니까? 나는 전체 화면을 위해 Cocoa API를 사용하는 앱에 주로 관심이 있지만, 다른 유형의 전체 화면 앱을 포함하는 솔루션이 있다면 훨씬 좋습니다. 이 솔루션은 Mac App Store 승인을 통과 할 수 있어야합니다.특정 NSScreen에서 실행중인 전체 화면 앱이 있는지 확인하는 방법

내 특정 사용 사례에는 메뉴 모음 앱 (NSStatusItem)이 포함되어 있고 메뉴 모음이 모두 [NSScreen mainScreen]에 표시되는지 여부를 파악하여 글로벌 키보드 바로 가기가 상태 항목에 대한 팝업 위치 지정 (if 표시됨) 또는 보이는 상태 항목이없는 경우 떠 다니는 창.

NSScreens 자체는 windows/apps에 대한 정보를 노출하지 않는 것으로 보이며 NSRunningApplication은이 정보를 노출하지 않습니다.

이 문제를 확인하는 Carbon API가 있습니까? 예를 들어, 창 목록이있는 경우이를 반복하여 모든 창 프레임이 화면의 프레임과 정확하게 일치하는지 확인할 수 있습니다. 반면에 프레임이 있고 다른 앱 (예 : 배경 앱, https://itunes.apple.com/us/app/backdrop/id411461952?mt=12) 아래에서 실행되는 앱이있을 수 있으므로 이와 같은 접근 방식은 창 수준을 조사해야합니다.

답변

0

CGWindowListCopyWindowInfo()과 같은 CGWindowList API를 사용해 볼 수 있습니다.

메뉴 막대가 표시되는지 알고 싶다면 NSApplicationPresentationAutoHideMenuBar 또는 NSApplicationPresentationHideMenuBar에 대해 -[NSApplication currentSystemPresentationOptions]을 확인해야합니다. 이 방법은 활성 앱이 코코아 전체 화면 모드 (NSApplicationPresentationFullScreen)인지 여부를 알려줍니다.

+0

감사합니다. CGWindowListCopyWindowInfo()를 살펴 보겠습니다. ('NSApplication'은 현재 활성화 된 응용 프로그램에 대한 정보를 찾고 있지 않기 때문에 유용하지 않습니다. 그러나 어떤 응용 프로그램이 화면에서 전체 화면으로 실행 중인지에 관한 것입니다.) – thomasfuchs

+0

응용 프로그램이 다른 공간에서 전체 화면으로 표시되는 것을 의미합니까? 이 NSApplication 메서드는 숨겨진 호출 앱이 아니라 숨겨진 메뉴인지 여부를 알려줍니다. 그건 그렇고, 응용 프로그램은 윈도우가 화면을 채우지 않아도 코코아 전체 화면 모드를 사용할 수 있습니다. 예를 들어 최대 크기 인 경우 (비록 CGWindowList를 통해 관찰 할 수있는 Cocoa에 의해 생성 된 차폐 창이있을 수 있습니다.) –

+1

참고 : 'currentSystemPresentationOptions'를 사용하면 작동하지 않습니다. 유일한 화면에서 실행되는 전체 화면 앱이 있더라도 여전히 얻을 수 있습니다. 내 menubar 전용 응용 프로그램 내에서 호출하는 '0' 백. – thomasfuchs

관련 문제