質問

Macで現在の壁紙を取得するにはどうすればよいですか? API関数を指定するだけで、さらにGoogleを使用できます。

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

シェルからも可能: デフォルトはcom.apple.desktop Background

を読み取ります

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

役に立ちましたか?

解決

更新された回答(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構文を使用する方法は、もちろん、この範囲を超えています答え。1つだけのヒント:sqlite(先頭のピリオドに注意してください!)と入力して.exitクライアントを終了し、Enterキーを押します(CTRL + Cは機能しません)。

もう1つ注意してください。アプリでデータベースを更新することはできますが、Dockはそれを認識しないので、効果はありません(背後で変更します)。 Dockにその変更を認識させるには、killall Dockのように強制終了します。HUPするだけで十分かもしれません(killall -HUP Dock)。実際には強制終了しません(テストしていません)。アプリ内では、DockのプロセスIDを見つけてシグナルを送信する必要があり(これはkillallと同じです)、プロセスIDを取得してシグナルを送信することもその応答の範囲外です。

レガシーアンサー(ライオン以前)

あなたは正しい軌道に乗っています。 Carbon / Cocoaでアプリケーションを作成する場合は、設定ファイルをロードするだけです。

にあります
/Users/<current-user>/Library/Preferences/com.apple.desktop.plist

辞書にはキーdefaultのサブ辞書が含まれ、このサブ辞書にはキーImageFilePathが含まれ、画像ファイルへの絶対パスが含まれます。

他のヒント

次のようにシェル+ Applescriptで実行できます:

#!/bin/bash
osascript -e 'tell app "finder" to get posix path of (get desktop picture as alias)'
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top