내 앱에서는 UI 용으로 하나, 전체 화면으로 렌더링 용으로 두 개의 디스플레이를 사용합니다 NSOpenGLContext
. CGDisplayCapture
으로 두 번째 디스플레이를 캡처하지만이 캡처는 ⌘ + 탭과 마찬가지로 시스템 키 이벤트를 비활성화합니다.CGDisplayCapture 및 시스템 키 이벤트
다시 사용하도록 설정하는 방법이 있습니까? 아니면 실수를하는 중입니까?
내 앱에서는 UI 용으로 하나, 전체 화면으로 렌더링 용으로 두 개의 디스플레이를 사용합니다 NSOpenGLContext
. CGDisplayCapture
으로 두 번째 디스플레이를 캡처하지만이 캡처는 ⌘ + 탭과 마찬가지로 시스템 키 이벤트를 비활성화합니다.CGDisplayCapture 및 시스템 키 이벤트
다시 사용하도록 설정하는 방법이 있습니까? 아니면 실수를하는 중입니까?
내가 알고있는 한, CGDisplayCapture를 사용하여 디스플레이를 캡쳐 한 경우 해당 키와 마우스 이벤트가 모두 해당 디스플레이에서 비활성화되어 있습니다. 디스플레이를 해제하지 않고 다시 사용할 수 있다고 생각하지 않습니다.
이것은 매우 오래된 스레드이지만 최근에이 문제가 발생하여 작동하는 해결책을 발견했습니다 (일부 오래된 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()