2011-08-21 4 views
17

코코아 앱에서 다른 애플리케이션이 현재 전체 화면 모드인지 확인하는 방법이 있습니까?Mac OS X Lion : 다른 응용 프로그램이 전체 화면 모드로 실행되고 있는지 감지합니까?

내 응용 프로그램이 모든 공간에 나타나도록 구성되어 mouseEntered 이벤트를 청취하여 앞을 주문합니다.

다른 앱이 전체 화면 모드에 있고 사용자가 내 앱의 창이있는 검은 색 영역을 가로 질러 이동하면 문제가 발생합니다 (여러 모니터에서 발생 함).

위의 동작은 [self setCollectionBehavior: NSWindowCollectionBehaviorCanJoinAllSpaces];을 활성화 한 상태에서만 보았습니다.

여기 내 앱과 관련된 다른 코드입니다.

- (void) mouseEntered:(NSEvent *)theEvent 
{ 
    // Don't do this when another app is in full screen mode: 
    [[self window] orderFront:self]; 
} 
+0

확인이 두 링크 아웃 - 그들이 당신에게 힌트를 줄 수 있습니다 http://stackoverflow.com/questions/633086/detecting-fullscreen-on-mac 및 HTTP를 : // 유래 .com/questions/6815917/how-to-know-if-a-nswindow-is-full-screen-in-mac-os-x-lion – leanne

답변

1

흠, 당신은 applescript/scriptingbridge를 사용하지 않았습니까? AppleScript에서 창의 크기를 가져 와서 화면의 크기와 비교할 수 있습니다. (또는 특정 앱이 어떤 화면에 있는지 알 수 없습니까?)
액세스 할 수있는 특정 앱의 창에는 'AXFullScreen'속성이 있습니다. 예를 들어이 일부 애플 리케이션을위한 작동합니다

tell application "System Events" 
    tell process "Pages" 
     repeat with myWin in windows 
      get value of attribute "AXFullScreen" of myWin 
     end repeat 
    end tell 
end tell 

실제 조치가 내려 탄소 것 같다 ... MacWindows.h 및 CarbonEvents.h 그들에 대한 참조를 "전체 화면"을 가지고있다.

당신은 이것을 연구 할 필요가 있습니다.

+0

AppleScript로 할 수있는 모든 일은 네이티브 코드로 더 빠르게 할 수 있습니다. 이 블로그 게시물은 코드에서 AX 속성에 액세스하는 데 유익합니다. http://cocoatutorial.grapewave.com/tag/axuielementcopyattributevalue/ – ipmcc

1

알림을 사용하십시오. 예 :

[[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(willEnterFull:) 
              name:NSWindowWillEnterFullScreenNotification 
              object:nil]; 

사실 NSDistributedNotificationCenter는 프로세스를 거치므로 대신 NSDistributedNotificationCenter를 사용하는 것이 좋습니다.

개체를 관찰자로 추가하여 다른 사람이 전체 화면으로 들어갈 것을 알리는 알림을 받으면 개체에 해당 알림이 수신됩니다.

선택자는 알림 프로세스에서 호출 할 메시지/메소드입니다.

name 매개 변수는 알림의 실제 이름입니다. 사용하고 싶은 것에 대한 사용자 정의 알림을 작성하지 않는 한 표준입니다.

개체 매개 변수는 알림을받을 개체를 지정하기위한 것입니다. 어떤 앱이 언제 전체 화면으로 전환되는지 알고 싶으므로이 값을 그대로 두길 원합니다.

해제하기 전에 개체를 옵저버로 제거해야합니다!

"NSWindowWillEnterFullScreenNotification"에 대한 등록

+0

이것은 응용 프로그램이 시작된 후 전체 화면이되는 응용 프로그램에서만 작동합니다. 응용 프로그램이 시작될 때 전체 화면 응용 프로그램이 실행 중이면 응용 프로그램에 새 알림을 보내지 않습니다. – Kyle

+0

예, 방금 전에 시작된 앱으로 이전 알림이 다시 전송되지 않습니다. 따라서 Mark가 자신의 앱을 시작할 때 다른 앱이 이미 전체 화면으로 열려 있는지 여부를 알아야 할 경우에는 도움이되지 않습니다. 그러나 일단 앱이 실행되면 그 시점부터 전체 화면 모드로 전환되는 모든 앱을 감지합니다. – leanne

+0

Mountain Lion에서 알림 동작이 변경 되었습니까? 귀하의 코드는 나에게 배포 센터가있는 알림을 보내지 않기 때문에. name 매개 변수를 nil (모든 알림을 수신)으로 설정하면 전체 화면 모드로 전환 할 때만 "com.apple.HIToolbox.hideMenuBarShown"이 표시됩니다. –

1

위에서 언급 한 방법

그들을 사용하여, 그들은 자신의 응용 프로그램을 통지 할 수 있습니다, 우리는 다른 응용 프로그램이 전체 화면 모드에 있는지 여부를 감지 할 수 없습니다 작동하지 않습니다 아닙니다.

그러나 많은 옵션을 시도해 본 후 github에서 전체 화면 탐지기 앱을 발견했습니다.이 유용한 링크는 ..:)

https://github.com/shinypb/FullScreenDetector.git

관련 문제