【问题标题】:Change desktop picture in objective-c在objective-c中更改桌面图片
【发布时间】:2010-08-20 18:08:47
【问题描述】:

cocoa/objective-c中如何改变桌面图片?我试过使用默认值,但有很多错误。

NSArray *args=[NSArray arrayWithObjects:@"write",@"com.apple.desktop", @"Background", @"'{default = {ImageFilePath = \"~/desktop.jpg\";};}'", nil];

NSTask *deskTask=[[NSTask alloc] init];

[deskTask setArguments: args];

[deskTask setLaunchPath:@"/usr/bin/defaults"];
[deskTask launch];
[[NSDistributedNotificationCenter defaultCenter] postNotificationName:@"com.apple.desktop" object:@"BackgroundChanged"];

该命令在终端中成功运行。我不需要任何人确切地告诉我该怎么做,但我想要一些见解。

编辑:我的操作系统是 10.4.11

【问题讨论】:

  • 那么,您遇到了什么错误?此外,在实际更改值之前,您不应发布通知;这可能还没有发生,因为您在开始任务后立即发布它。您应该先等待任务完成。 (当你完成任务时不要忘记释放它。)
  • 没有错误,但 plist 文件 (com.apple.desktop) 现在有一个元素(背景)包含 {default = {ImageFilePath = "~/desktop.jpg";};}跨度>
  • plist 文件应该有一个嵌套的 ImageFilePath 元素(在默认元素内),内容为“~/desktop.jpg”。

标签: objective-c cocoa unix terminal


【解决方案1】:

我认为规范的方法是将脚本与系统事件结合使用。 Applescript 版本类似于:

tell application "System Events"
    tell current desktop
        set picture to (whatever)
    end tell
end tell

您可以使用 Scripting Bridge 从 Objective-C 中进行操作。

【讨论】:

  • 我忘了在我的问题中添加我的操作系统是 10.4.11(不幸的是,脚本桥不可用)。有解决办法吗?
【解决方案2】:

当您在 shell 中使用波浪号压缩路径时,shell 会为您展开波浪号,因此当您在 shell 中运行命令时,您将桌面图片路径设置为展开后的路径(/path/to/桌面.jpg)。使用 NSTask 时没有 shell 在工作,因此您显示的代码将其设置为波浪号压缩路径。很少有东西期望这样的路径;他们不扩展波浪号,所以它不起作用。

要使该代码正常工作,您需要使用 NSString 对象的适当方法扩展波浪号本身,或者通过附加到 NSHomeDirectory() 返回的路径来构造路径。

也就是说,按照 Chuck 的建议与系统事件对话是实现这一点的更好方法。注意他的评论告诉你如何在不需要 Leopard 的情况下做到这一点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多