Macでデスクトップの背景を取得する
-
08-07-2019 - |
質問
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)'