5

Macで現在の壁紙を取得するにはどうすればよいですか?私がもっとグーグルできるように、API関数を指さすだけです。

編集:私はそれを見つけたと思います。[NSUserDefaultsstandardUserDefaults]はhttp://lists.apple.com/archives/student-dev/2004/Aug/msg00140.htmlで言及されています

シェルからも可能:デフォルトはcom.apple.desktopを読む背景

そしてAppleScriptから: http ://discussions.apple.com/thread.jspa?messageID = 7111272

4

2 に答える 2

6

更新された回答(マーベリックス以降)

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、画像ファイルへの絶対パスを含むキーが含まれています。

于 2008-11-19T11:04:09.153 に答える