Изменить картинку рабочего стола в объективе - PullRequest
0 голосов
/ 20 августа 2010

Как изменить картинку на рабочем столе в какао / объектив-с? Я пытался использовать значения по умолчанию, но у меня было много ошибок.

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

Ответы [ 2 ]

3 голосов
/ 20 августа 2010

Я думаю, что каноническим способом является использование сценариев с системными событиями.Версия Applescript выглядит примерно так:

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

Вы можете использовать Scripting Bridge , чтобы сделать это из Objective-C.

2 голосов
/ 21 августа 2010

Когда вы используете сжатый тильдой путь в оболочке, оболочка расширяет тильду для вас, поэтому, когда вы запускаете команду в оболочке, вы устанавливаете путь к изображению рабочего стола в расширенный путь (/ путь / к / desktop.jpg). Когда вы используете NSTask, оболочка не работает, поэтому показанный вами код устанавливает ее в сжатый тильдой путь. Очень немногие ожидают такого пути; они не расширяют тильду, поэтому она не работает.

Чтобы этот код работал, вам нужно расширить саму тильду, используя соответствующий метод объекта NSString, или создать путь, добавив к пути, возвращенному NSHomeDirectory().

Тем не менее, разговор с System Events, как предложил Чак, является гораздо лучшим способом реализовать это. Обратите внимание на его комментарий, рассказывающий, как это сделать, не требуя леопарда.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...