Swift   发布时间:2022-03-31  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了swift – 如何循环遍历所有Mac桌面空间大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

我正在为所有屏幕和空格(预先存在和新建)设置桌面背景.然而,我似乎找不到一种方法来设置所有现有空格的背景(并且任何使用旧背景创建的新空格). 这是我到目前为止 let sqlData = NSMutableArray() let paths = NSSearchPathForDirectoriesInDomains(.ApplicationSupportDirectory, .UserDomain
我正在为所有屏幕和空格(预先存在和新建)设置桌面背景.然而,我似乎找不到一种方法来设置所有现有空格的背景(并且任何使用旧背景创建的新空格).

这是我到目前为止

let sqlData = NSMutableArray()
let paths = NSSearchPathForDirectoriesInDomains(.ApplicationSupportDirectory,.UserDomainMask,truE)
let appSupportDirectory = paths.first! as NSString
let dbPath = appSupportDirectory.StringByAppendingPathComponent("Dock/desktoppicture.db") as NSString

var db: COpaquePointer = nil
if sqlite3_open(dbPath.UTF8String,@R_446_4616@ == sqlITE_OK {
    var statement: COpaquePointer = nil

    if sqlite3_exec(db,"deletE FROM data",nil,nil) != sqlITE_OK {
        let errmsg = String.fromCString(sqlite3_errmsg(db))
        print("error deleting table row: \(errmsg)")
    }

    if sqlite3_exec(db,"INSERT INTO DATA (value) VALUES ('\(getBACkgroundImagePath())');",nil) != sqlITE_OK {
        let errmsg = String.fromCString(sqlite3_errmsg(db))
        print("error inserTing table row: \(errmsg)")
    }

    let workspace = NSWorkspace.sharedWorkspace()

    for screen in NSScreen.screens()! {
        do {
            let options = workspace.desktopImageOptionsForScreen(screen)
            try workspace.setDesktopImageURL(NSURL(fileURLWithPath: getBACkgroundImagePath()),forScreen: screen,options: options!)
        } catch let error as NSError {
            NSLog("\(error.localizedDescription)")
        }
    }

    system("/usr/bin/killall Dock")
}

sqlite3_close(db)

注意:我更新〜/ Library / Application Support / Dock / desktoppicture.db中的.db文件.由于这并没有实际更新背景,所以我继续循环遍历每个屏幕并手动设置.

然这会更改屏幕的所有背景,但任何非活动空格都不会更改,而创建的任何新空格都将使用旧的背景.

我在GitHub的一个小应用程序中使用这个代码,这是用户报告的问题. You can find the issue here (with a terminal solution).

苹果有一个看似相关的项目here,但即使他们不更新多个空间.

此外,如果您通过认的Mac设置应用程序更新背景,它也不会更改预先存在的空格.是不可能吗

OS X桌面图片跨越空间全局更新

在desktoppicture.db中,可以使用新图像(值)的路径在数据表上运行更新查询.不必删除,然后插入值或使用循环.使用无范围的查询调用更新,并通过这样做更新数据表中的每一行.

(以下示例使用SQLite.swift语言层,它使用类型安全的纯Swift界面)

func globalDesktopPicture(image: String) {

    let paths: [String] = NSSearchPathForDirectoriesInDomains(.ApplicationSupportDirectory,truE)
    let appSup: String = paths.first!
    let dbPath: String = (appSup as NSString).StringByAppendingPathComponent("Dock/desktoppicture.db")

    let dbase = try? Connection("\(dbPath)")
    let value = Expression<String?>("value")    
    let table = Table("data")
    try! dbase!.run(table.update(value <- imagE))

    system("/usr/bin/killall Dock")
}

更改db的相同概念/原则适用的一样,如果您决定使用传统/传统(桥接头)做sqlite3查询方法

func legacyGlobalDesktopPicture(image: String) {

    let paths: [String] = NSSearchPathForDirectoriesInDomains(.ApplicationSupportDirectory,truE)
    let appSup: String = paths.first!
    let dbPath: String = (appSup as NSString).StringByAppendingPathComponent("Dock/desktoppicture.db")

    var db: COpaquePointer = nil
    if sqlite3_open(dbPath,@R_446_4616@ == sqlITE_OK {

        if sqlite3_exec(db,"updatE DATA SET VALUE = ('\(imagE)');",nil) != sqlITE_OK {
            let errmsg = String.fromCString(sqlite3_errmsg(db))
            print("error inserTing table row: \(errmsg)")
        }

        system("/usr/bin/killall Dock")
    }
    sqlite3_close(db)
}

注意:上面的例子是非常小的,应该包括一些错误检查等.

附加信息:

> How to get the path to the current space wallpaper?
> SQLite.swift Documentation : Updating Rows
> SQLite.swift / A type-safe,Swift-language layer over SQLite3

大佬总结

以上是大佬教程为你收集整理的swift – 如何循环遍历所有Mac桌面空间全部内容,希望文章能够帮你解决swift – 如何循环遍历所有Mac桌面空间所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。