gpt4 book ai didi

objective-c - 如何获取 OSX 上当前工作区/屏幕壁纸的路径?

转载 作者:搜寻专家 更新时间:2023-10-31 22:15:26 24 4
gpt4 key购买 nike

从 AppKit 版本 10.7 开始,NSWorkspace.desktopImageForScreen可能会返回文件夹的路径,而不是当前作为墙纸的文件的 URL。该文件夹是依次拾取壁纸进行显示的位置。 (在 release notes 中搜索 setDesktopImageURL)。

如果用户将桌面图像设置为每 30 分钟左右随机更改一次,是否有任何方法可以确定 OSX 中每个屏幕的当前事件壁纸是什么?


更新:根据@l'L'l 的回答,我创建了一个小型 Mac OSX 应用程序以方便地找到当前事件的壁纸:https://github.com/musically-ut/whichbg

最佳答案

OS X 10.10 上有一个名为 desktoppicture.dbSQLite 3.x 数据库。这个 db 文件存储当前桌面图片、目录、空间、间隔等信息,当发生定时随机桌面图片转换或系统偏好设置 > 桌面有任何更改时:

Objective-C

// Get Current Desktop Picture

- (IBAction)getDesktopPicture:(id)sender {

[self getCurrentDesktop];
}

-(void)getCurrentDesktop {

NSMutableArray *sqliteData = [[NSMutableArray alloc] init];

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, YES);
NSString *appSup = [paths firstObject];
NSString *dbPath = [appSup stringByAppendingPathComponent:@"Dock/desktoppicture.db"];

sqlite3 *database;
if (sqlite3_open([dbPath UTF8String], &database) == SQLITE_OK) {

const char *sql = "SELECT * FROM data";
sqlite3_stmt *sel;
if(sqlite3_prepare_v2(database, sql, -1, &sel, NULL) == SQLITE_OK) {

while(sqlite3_step(sel) == SQLITE_ROW) {
NSString *data = [NSString stringWithUTF8String:(char *)sqlite3_column_text(sel, 0)];
[sqliteData addObject:data];
}
}
}
NSUInteger cnt = [sqliteData count] - 1;
NSLog(@"Desktop Picture: %@", sqliteData[cnt]);
NSLog(@"%@",sqliteData);

sqlite3_close(database);
}

结果:

2015-06-23 14:36:04.470 CurrentDesktop[72591:87862519] Desktop Picture: Poppies.jpg 2015-06-23 14:36:04.470 CurrentDesktop[72591:87862519] ( "60.0", 1, "Poppies.jpg" )

有很多其他方法可以从这个文件中获取数据(例如 NSTaskBashAppleScript 等) . 这是我的首选解决方案,因为它是 native mac 代码;它足够简单,可以移植到其他地方。

关于objective-c - 如何获取 OSX 上当前工作区/屏幕壁纸的路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30954492/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com