CGDisplayCreateImage仅返回壁纸和任务栏

j.u*_*ruh 5 xcode appkit swift

我正在尝试从屏幕上获取显示器指定部分的像素颜色。我曾经CGDIsplayCreateImage(_:)这样做过,但由于某种原因,它没有创建当前打开的窗口的屏幕截图,而是只提供了壁纸和任务栏的图像。

为了可视化屏幕截图,我使用了 SwiftUI 视图。在我的应用程序中,我实际上不需要显示屏幕截图。

struct ScreenshotView: View {
    let cgImage: CGImage

    var body: some View {
        Image(decorative: cgImage, scale: 3)
    }
}
Run Code Online (Sandbox Code Playgroud)

这些applicationDidFinishLaunching(_:)方法看起来像这样。

func applicationDidFinishLaunching(_ aNotification: Notification) {

  let contentRect = NSRect(x: 0, y: 0, width: 240, height: 240)

  // Create the window and set the content view.
  window = NSWindow(
      contentRect: contentRect,
      styleMask: [.titled, .closable, .miniaturizable, .resizable, .fullSizeContentView],
      backing: .buffered, defer: false)
  window.center()
  window.setFrameAutosaveName("Main Window")
  window.contentView = NSHostingView(rootView: ScreenshotView(cgImage: CGDisplayCreateImage(CGMainDisplayID())!))
  window.makeKeyAndOrderFront(nil)
}
Run Code Online (Sandbox Code Playgroud)

由于 XCode 和其他一些应用程序已打开,因此它应该为我提供所有打开的 windows 的当前屏幕的屏幕截图。相反,我得到了壁纸和任务栏的屏幕截图,其中显示了我的应用程序名称。没有显示任何应用程序,并且坞站也丢失了。

在此输入图像描述

我做错了什么还是这是一个错误?

stackoverflow 中,答案表明我正确使用了该函数。

j.u*_*ruh 5

即使这对某些人来说可能是显而易见的,我也会在Ken Thomases的帮助下回答我自己的问题。

您可以在下面找到我在目标中设置的设置。现在每次重建后它都可以工作。确保停用自动签名并将签名证书设置为“签名以在本地运行”。

在此输入图像描述

希望这可以在某个时候帮助某人。