2010-06-07 66 views
1

在我的應用程序中,我使用2個顯示屏,一個用於UI,一個用於全屏顯示NSOpenGLContext。我用CGDisplayCapture捕獲第二個顯示,但是這個捕獲禁用了系統鍵事件,就像⌘+ tab一樣。CGDisplayCapture和系統按鍵事件

有沒有辦法重新啓用它,或者我只是犯了一個錯誤?

回答

1

據我所知,當使用CGDisplayCapture捕獲顯示器時,該顯示器上的所有鍵和鼠標事件都被禁用。我不認爲你可以在不釋放顯示器的情況下再次啓用它們。

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()