Обновленный ответ (Mavericks и новее)
Начиная с Mavericks, Apple записывает изображения рабочего стола в
/Users/<current-user>/Application Support/Dock/desktoppicture.db
, которая является базой данных SQLite. Вы можете открыть этот файл в терминале, как это
sqlite3 "/Application Support/Dock/desktoppicture.db"
и затем выполните следующую команду SELECT:
SELECT display_uuid,space_uuid,value
FROM preferences
JOIN data ON preferences.data_id=data.ROWID
JOIN pictures ON preferences.picture_id=pictures.ROWID
JOIN displays ON pictures.display_id=displays.ROWID
JOIN spaces ON pictures.space_id=spaces.ROWID ;
Выход будет
<UID1>|<UID2>|<PicturePath>
<UID1>|<UID2>|<PicturePath>
:
UID1
- это UID дисплея (например, дисплей вашего MacBook, внешний дисплей и т. Д., Поскольку каждый дисплей может иметь собственное фоновое изображение), UID2
является необязательным (иногда он отсутствует, который, вероятно, означает все пробелы этого дисплея), и это UID пробела (у каждого дисплея в OS X может быть несколько пробелов, и у каждого пробела может быть свой собственный фоновый образ), а <PicturePath>
- путь к изображению (для этого определенного пробела на этом конкретном дисплее).
Конечно, вы можете связать свое приложение с библиотекой SQLite и делать все это с помощью библиотечных вызовов, но использование SQLite и синтаксиса SQL для запросов и обновления данных, конечно, выходит за рамки этого ответ. Только один совет: вы выходите из sqlite
клиента, набирая .exit
(обратите внимание на начальный период!) и нажимаете ввод (CTRL + C не работает).
Еще одно замечание: вы можете обновить базу данных в вашем приложении, но это не будет иметь никакого эффекта, так как док не узнает об этом (вы измените ее за спиной). Чтобы Dock знал об этом изменении, вы должны убить его как killall Dock
, может быть достаточно просто подключить его (killall -HUP Dock
), что на самом деле не убьет его (я этого не проверял). В приложении вам нужно найти идентификатор процесса Dock и отправить ему сигнал (это то же самое, что killall
), получение идентификаторов процесса и отправка сигналов также выходит за рамки этого ответа.
Legacy Answer (Лев и ранее)
Вы на правильном пути. Если вы пишете приложение в Carbon / Cocoa, просто загрузите файл настроек. Он расположен в
/Users/<current-user>/Library/Preferences/com.apple.desktop.plist
Словарь содержит подсловарь с ключом default
, а этот подсловарь содержит ключ ImageFilePath
, содержащий абсолютный путь к файлу изображения.