更新された回答(マーベリックス以降)
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構文を使用する方法は、もちろん、この回答の範囲をはるかに超えています. 1 つのヒント:sqlite
クライアントを終了するには、入力し.exit
て (先頭のピリオドに注意してください!)、Enter キーを押します (CTRL+C は機能しません)。
もう 1 つ注意: アプリでデータベースを更新できますが、Dock はそれを認識しないため、何の効果もありません (背後で変更します)。Dock にその変更を認識させるには、 のようkillall Dock
に kill します。HUP ( ) するだけで十分かもしれkillall -HUP Dock
ませんが、実際には kill しません (私はテストしていません)。アプリ内では、Dock のプロセス ID を見つけてシグナルを送信する必要があります (これは同じですkillall
)。プロセス ID を取得してシグナルを送信することも、その応答の範囲を超えています。
レガシー アンサー (Lion 以前)
あなたは正しい軌道に乗っています。Carbon/Cocoa でアプリケーションを作成する場合は、設定ファイルをロードするだけです。それはに位置しています
/Users/<current-user>/Library/Preferences/com.apple.desktop.plist
ディクショナリにはキーdefault
を持つサブディクショナリが含まれており、このサブディクショナリにはImageFilePath
、画像ファイルへの絶対パスを含むキーが含まれています。