2010-06-07 5 views
1

내 앱에서는 UI 용으로 하나, 전체 화면으로 렌더링 용으로 두 개의 디스플레이를 사용합니다 NSOpenGLContext. CGDisplayCapture으로 두 번째 디스플레이를 캡처하지만이 캡처는 ⌘ + 탭과 마찬가지로 시스템 키 이벤트를 비활성화합니다.CGDisplayCapture 및 시스템 키 이벤트

다시 사용하도록 설정하는 방법이 있습니까? 아니면 실수를하는 중입니까?

답변

1

내가 알고있는 한, CGDisplayCapture를 사용하여 디스플레이를 캡쳐 한 경우 해당 키와 마우스 이벤트가 모두 해당 디스플레이에서 비활성화되어 있습니다. 디스플레이를 해제하지 않고 다시 사용할 수 있다고 생각하지 않습니다.

0

이것은 매우 오래된 스레드이지만 최근에이 문제가 발생하여 작동하는 해결책을 발견했습니다 (일부 오래된 Obj-C Apple 예제 코드에서 발견됨). 해결책은 OS가 직접 이벤트를 전달하는 대신 이벤트를 직접받는 것입니다. 이것은 내가 사용하고있는 Swift 3 버전입니다 (이 코드를 작성하는 데 좀 더 최적의 방법이있을 수 있지만 저에게는 효과가있는 것 같습니다).

CGCaptureAllDisplays() 

// Show full screen captured display until Escape key is pressed. 
var isInFullScreen = true 
while (isInFullScreen) { 
    autoreleasepool { 
     while let event = NSApp.nextEvent(matching: .any, until: Date.distantPast, inMode: .defaultRunLoopMode, dequeue: true) { 
      switch event.type { 
      case .keyDown: 
       if let key = event.charactersIgnoringModifiers { 
        if key == "\u{001B}" { 
         // Escape key pressed. 
         print("ESCAPE") 
         isInFullScreen = false 
         break 
        } 
       } 
      default: 
       print("<unknown event>") 
       break 
      } 
     } 
    } 
} 

CGReleaseAllDisplays()