在我的應用程序中,我使用2個顯示屏,一個用於UI,一個用於全屏顯示NSOpenGLContext
。我用CGDisplayCapture
捕獲第二個顯示,但是這個捕獲禁用了系統鍵事件,就像⌘+ tab一樣。CGDisplayCapture和系統按鍵事件
有沒有辦法重新啓用它,或者我只是犯了一個錯誤?
在我的應用程序中,我使用2個顯示屏,一個用於UI,一個用於全屏顯示NSOpenGLContext
。我用CGDisplayCapture
捕獲第二個顯示,但是這個捕獲禁用了系統鍵事件,就像⌘+ tab一樣。CGDisplayCapture和系統按鍵事件
有沒有辦法重新啓用它,或者我只是犯了一個錯誤?
據我所知,當使用CGDisplayCapture捕獲顯示器時,該顯示器上的所有鍵和鼠標事件都被禁用。我不認爲你可以在不釋放顯示器的情況下再次啓用它們。
這是一個非常古老的線程,但我最近遇到了這個問題,並找到了一個可行的解決方案(在一些舊的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()