【问题标题】:CGDisplayCapture and system key eventsCGDisplayCapture 和系统按键事件
【发布时间】:2011-02-28 22:04:06
【问题描述】:

在我的应用程序中,我使用 2 个显示,一个用于 UI,一个用于全屏渲染NSOpenGLContext。我使用CGDisplayCapture 捕获第二个显示,但此捕获禁用系统键事件,就像 ⌘ + tab 一样。

有没有办法重新启用它还是我弄错了?

【问题讨论】:

    标签: cocoa fullscreen


    【解决方案1】:

    据我所知,当使用 CGDisplayCapture 捕获显示时,该显示上的所有键和鼠标事件都被禁用。我认为您不能在不释放显示的情况下再次启用它们。

    【讨论】:

      【解决方案2】:

      这是一个非常古老的线程,但我最近遇到了这个问题并找到了一个可行的解决方案(在一些旧的 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()
      

      【讨论】:

        猜你喜欢
        • 2014-01-31
        • 2022-07-22
        • 2011-12-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-07
        • 2012-07-18
        相关资源
        最近更新 更多