获取 Cocoa 中的当前壁纸

2023-11-27

我正在使用此代码来获取当前壁纸:

NSURL *imageURL = [[NSWorkspace sharedWorkspace] desktopImageURLForScreen:[NSScreen mainScreen]];

这工作正常,但是当我将图片文件夹设置为壁纸时(如图所示),imageURL是一个目录,那么在这种情况下如何获取当前壁纸的USURL呢?

enter image description here


还有另一种方法可以通过截取当前壁纸的屏幕截图来获取图像。

extension NSImage {

    static func desktopPicture() -> NSImage {

        let windows = CGWindowListCopyWindowInfo(
            CGWindowListOption.OptionOnScreenOnly,
            CGWindowID(0))! as NSArray

        var index = 0
        for var i = 0; i < windows.count; i++  {
            let window = windows[i]

            // 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
            }

            // wee need the one which belongs to the current screen
            let bounds = window["kCGWindowBounds"] as! NSDictionary
            let x = bounds["X"] as! CGFloat
            if x == NSScreen.mainScreen()!.frame.origin.x {
                index = window["kCGWindowNumber"] as! Int
                break
            }
        }

        let cgImage = CGWindowListCreateImage(
            CGRectZero,
            CGWindowListOption(arrayLiteral: CGWindowListOption.OptionIncludingWindow),
            CGWindowID(index),
            CGWindowImageOption.Default)!

        let image = NSImage(CGImage: cgImage, size: NSScreen.mainScreen()!.frame.size)
        return image
    }        
}

恕我直言,如果您需要图片而不是网址,则这种方法看起来简单得多。

请注意,壁纸不再在 com.apple.dektop plist 中定义:从 Mavericks 开始,该设置已移至 ~/Library/Application Support/Dock/desktoppicture.db。这是 SQLite 文件,“数据”表包含 url。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

获取 Cocoa 中的当前壁纸 的相关文章

随机推荐

  • 合并相同键的值

    可以用吗awk将相同键的值放入一行 例如 a 100 b 200 a 131 a 102 b 203 b 301 我可以将它们转换为这样的文件吗 a 100 131 102 b 200 203 301 您可以像这样使用 awk awk F
  • Google plus客户端“发生内部错误”[重复]

    这个问题在这里已经有答案了 昨天 当我尝试在我的应用程序中使用 Google Plus 签署用户时 我开始收到 发生内部错误 我使用得很好并且没有更改 代码已经很长时间没有改变了 GmsClient回报 connect bindServic
  • Azure 上的 Django 不加载静态文件

    我按照下面的教程在azure上创建了一个django项目 http www windowsazure com en us develop python tutorials web sites with django 一切正常 直到我尝试安装
  • 大量 if 语句的快速替代方案

    我是java初学者 我正在制作一个简单的程序 在其中输入一些内容 如果我输入的内容与 数据库 上的其中一个内容匹配 那么它会打印一些文本 有没有比这样做更简单的方法来检查这一点 int 1 int 2 int 3 etc if USER I
  • NoClassDefFoundError:无法初始化类 androidx.customview.poolingcontainer.PoolingContainer

    使用 Jetpack Compose UI 工具1 2 0 rc01和组合编译器1 2 0 android composeOptions kotlinCompilerExtensionVersion 1 2 0 dependencies d
  • Node.js 中域的替代方案

    由于 nodev4 2 1 已发布 并且该域被标记为已弃用 所以现在我需要它的替代方案 早些时候 我曾经将请求级别变量存储在域中 以便我可以在请求的同一上下文中查找数据的其他过程中使用这些变量 我们有什么办法可以实现它吗 注意 我无法使用请
  • 如何使用 boto3 为 AWS Cognito 创建 SECRET_HASH?

    我想使用 boto3 和 python 为 AWS Cognito 创建 计算 SECRET HASH 这将合并到我的 fork 中warrant 我将我的 Cognito 应用程序客户端配置为使用app client secret 但是
  • 如何在C#中使用实体框架从存储过程获取输出结果?

    我正在开发一个 ASP NET MVC 项目 我的目标是从表格中准备一份报告 所以 我第一次编写 Linq 代码 但速度太慢了 之后我编写了一个 SQL 查询 它非常快 我想使用存储过程从我的表中获取报告数据 事实上 我的项目非常简单 它获
  • 对于 git diff --name-status,输出是什么意思?

    当我跑步时git diff name status我看到这样的行 MM mm Jenkinsfile MM 是什么意思 mkreiger1 的 可能重复 确实提供了有用的信息 但就像 Koop4 的答案一样 它在不引用回答此问题的 git
  • 如何禁用颤振上的自动热重载?

    我已经搜索过这个问题并看到了解决方案 但我无法找出问题所在 我收到一些错误 因为每次编写代码时 它都会在我完成代码之前直接运行热重载 那么 如何禁用 flutter 中的自动热重载呢 flutter 中的自动热重载非常烦人 我只想使用基于
  • 两次调用 CoInitialize()

    假设我的应用程序在启动时调用 CoInitialize 并在存在之前调用 CoUninitialize 假设我有一个由我的应用程序使用的第三方组件并执行类似的操作 这会导致某种故障吗 当调用已经提交时 可以调用 CoInitialize 吗
  • Postgres 类似于 SQL Server 中的 CROSS APPLY

    我需要将为 MS SQL Server 2005 编写的 SQL 查询迁移到 Postgres 9 1 最好的替代方法是什么CROSS APPLY在这个查询中 SELECT FROM V CitizenVersions CROSS APPL
  • 为什么我的 D3 折线图显示每个实体的黑色区域?

    我制作了一个网络爬虫 用于获取有关不同银行的货币转移汇率的数据 并在一段时间内以 D3 线图的形式显示该数据 每家银行都有一条线 汇率为每天 cronjob 服务器端确保每天都会进行抓取 在前端 它使用 D3 json 从此 url 获取数
  • 从语音中获取用户输入?

    我刚刚开始尝试 C Net 中的 Windows Speech to Text 功能 我目前已经掌握了基础知识 IE 说点什么 它会根据你所说的提供输出 但是 我正在努力弄清楚如何实际接收用户输入作为变量 我的意思是 例如 如果用户说 Ca
  • 将图像文件保存到sql Server并将字节数组转换为图像

    我将图像存储在数据库中 并希望将它们从字节数组转换为图像 将对象转换为字节数组没有问题 但在尝试从字节数组转换为图像时出现 参数无效 错误 我传递给方法的对象来自数据集行 存储过程 USE GO Object StoredProcedure
  • R 中的 diag() 函数

    有没有办法使用diag 矩阵中的函数而不使用内置函数或迭代 M lt matrix 1 9 ncol 3 make a matrix q5b lt function M function 我知道M 1 1 M 2 2 and M 3 3 会
  • 如何在没有库函数的情况下将字符串解析为整数?

    最近我在一次采访中被问到这个问题 如何在不使用任何库函数且不考虑语言的情况下将 12345 形式的字符串解析为其整数表示形式 12345 我想到了两个答案 但面试官说还有第三个 这是我的两个解决方案 解决方案 1 保留一本映射 1 gt 1
  • 如何相对于鼠标位置旋转图像?

    我正在尝试做这样的效果 http metatroid com articles在页面顶部 但我无法仅使用他们给出的代码来旋转它 var img image if img length gt 0 var offset img offset f
  • 如何告诉 google bot 跳过部分 HTML?

    有很多关于相反情况的信息 当人们尝试在 HTML 中包含内容时 谷歌机器人可以看到这些内容 但用户不可见 就我而言 我需要相反的东西 从谷歌机器人隐藏一些 html 问题是如何 闪存不是答案 也不想使用花哨的 ajax 东西 主要是因为我立
  • 获取 Cocoa 中的当前壁纸

    我正在使用此代码来获取当前壁纸 NSURL imageURL NSWorkspace sharedWorkspace desktopImageURLForScreen NSScreen mainScreen 这工作正常 但是当我将图片文件夹