如何以编程方式将桌面图像设置为 NSWindow objective c?

How to set desktop image to NSWindow programmatically objective c?

如何在 mac os 应用程序中以编程方式将桌面图像设置为 NSWindow 背景图像。 Suppose 如果我点击一个按钮,那么无论桌面图像是什么,它都应该应用于 NSWindow 背景。

要获取屏幕的桌面图像,您可以使用 NSWorkspace 提供的方法。

方法desktopImageURLForScreen:returns一个URL图片文件,而方法desktopImageOptionsForScreen:returns一个桌面图片选项的字典-如何图片是否应该缩放,是否应该平铺等

使用这些方法和 NSImageView 您应该能够显示适当缩放、平铺和对齐的桌面图像作为 window 背景。如果你在多屏系统上支持windows跨屏,它会稍微复杂一点,但方法本质上是一样的。

HTH

如果应用未经过沙盒化,CRD 建议会起作用。如果是,那么你不能用 NSWorkspace.shared.desktopImageURL(for: screen).

做任何事情

您可以玩 Core Graphics 并抓取桌面图片:

extension NSImage {

    static func desktopPictures() -> [NSImage] {

        let info = CGWindowListCopyWindowInfo(.optionOnScreenOnly, kCGNullWindowID) as? [[ String : Any]]

        var images = [NSImage]()

        for window in info! {

            // we need windows owned by Dock
            let owner = window["kCGWindowOwnerName"] as! String
            if owner != "Dock" {
                continue
            }

            // we need windows named like "Desktop Picture %"
            let name = window["kCGWindowName"] as! String
            if !name.hasPrefix("Desktop Picture") {
                continue
            }

            // this belongs to a screen
            let index = window["kCGWindowNumber"] as! CGWindowID
            let cgImage = CGWindowListCreateImage(CGRect.infinite, CGWindowListOption(arrayLiteral: CGWindowListOption.optionIncludingWindow), index, CGWindowImageOption.nominalResolution)
            images.append(NSImage(cgImage: cgImage!, size: NSMakeSize(CGFloat(cgImage!.width), CGFloat(cgImage!.height))))
        }

        // return the array of Desktop images
        return images
    }
}

然后获取桌面图像

NSImage.desktopPictures()

感谢Cocoa: take screenshot of desktop wallpaper (without icons and windows) and