在我的应用中,我使用2个显示,一个用于UI,一个用于使用全屏NSOpenGLContext
进行渲染。我使用CGDisplayCapture
捕获第二个显示,但此捕获会禁用系统键事件,就像⌘+ tab一样。
有没有办法重新启用它,或者我只是犯了错误?
答案 0 :(得分:1)
据我所知,当使用CGDisplayCapture捕获显示时,在该显示器上禁用所有键和鼠标事件。我不认为你可以在不释放显示器的情况下再次启用它们。
答案 1 :(得分:0)
这是一个非常老的线程,但我最近遇到了这个问题并找到了一个有效的解决方案(在一些旧的Obj-C Apple示例代码中找到它)。似乎解决方案是自己获取事件而不是让操作系统将它们传递给您。这是我正在使用的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()