CGDisplayCreateImage возвращает только обои и панель задач - PullRequest
0 голосов
/ 10 ноября 2019

Я пытаюсь получить цвета пикселей на экране для определенной части экрана. Для этого я использую CGDIsplayCreateImage(_:), но по какой-то причине вместо создания снимка экрана с открытыми в данный момент окнами просто выдается изображение обоев и панели задач.

ВДля того, чтобы визуализировать скриншот я использую вид SwiftUI. В моем приложении мне фактически не нужен отображаемый скриншот.

struct ScreenshotView: View {
    let cgImage: CGImage

    var body: some View {
        Image(decorative: cgImage, scale: 3)
    }
}

А методы 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)
}

Поскольку XCode и некоторые другие приложения открыты,должен дать мне скриншот текущего экрана со всеми открытыми ветрами. Вместо этого я получаю скриншот обоев и панель задач с названием моего приложения. Приложения не отображаются, а док также отсутствует.

enter image description here

Я что-то не так делаю или это ошибка?

В это ответы на вопросы stackoverflow предполагают, что я правильно использую функцию.

1 Ответ

0 голосов
/ 12 ноября 2019

Даже если это может быть очевидным для некоторых людей, я отвечу на свой вопрос здесь, используя помощь Кен Томас .

Ниже вы можете найти настройки, которые я установил в моей цели. Теперь он работает после каждой перестройки. Обязательно деактивируйте автоматическую подпись и установите для сертификата подписи значение «Sign to Run Local».

enter image description here

Надеюсь, что в какой-то момент это кому-нибудь поможет.

...