Pregunta

¿Cómo puedo conseguir el fondo de pantalla actual en un Mac?Sólo me apunte a una función de la API, así que puedo Google más.

Editar:Creo que lo he encontrado.[NSUserDefaults standardUserDefaults] mencionado en http://lists.apple.com/archives/student-dev/2004/Aug/msg00140.html

También es posible desde la consola:los valores predeterminados de lectura de com.apple.Fondo de escritorio

Y de AppleScript:http://discussions.apple.com/thread.jspa?messageID=7111272

¿Fue útil?

Solución

Respuesta actualizada (Mavericks y la más reciente)

Comenzando con Mavericks, Apple escribe las imágenes de Escritorio para

/Users/<current-user>/Application Support/Dock/desktoppicture.db 

que es una base de datos SQLite.Usted puede abrir este archivo en el Terminal como este

sqlite3 "/Application Support/Dock/desktoppicture.db"

y, a continuación, ejecute la siguiente instrucción 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 ;

La salida será

<UID1>|<UID2>|<PicturePath>
<UID1>|<UID2>|<PicturePath>
:

UID1 es el UID de una pantalla (por ejemplo,la pantalla de tu MacBook, una pantalla externa, etc.como cada pantalla puede tener una propia imagen de fondo), UID2 es opcional (a veces es falta, lo que probablemente significa que todos los espacios de la pantalla) y es el UID de un espacio (por cada pantalla en OS X puede tener múltiples espacios y cada espacio puede tener un propio fondo de pantalla) y <PicturePath> es la ruta a la imagen (para este espacio específico en esta pantalla específica).

Por supuesto, usted puede vincular su Aplicación en contra de la biblioteca SQLite y hacer todo lo que con las llamadas a la biblioteca, pero cómo utilizar SQLite y la sintaxis SQL para las consultas y actualización de datos son, por supuesto, más allá del alcance de esta respuesta. Sólo un consejo:A la salida de los sqlite cliente escribiendo .exit (nota: el líder y punto!) y pulse la tecla enter (CTRL+C no funcionará).

Sólo una nota más:Usted puede actualizar la base de datos en su aplicación, pero que no tienen ningún efecto como el Dock no sabrá sobre él (que lo cambie por detrás de su espalda).Para que el Muelle conscientes de que el cambio, usted tiene que matar como killall Dock, puede ser suficiente HUP es (killall -HUP Dock), que en realidad no matar (no he probado eso).Dentro de una aplicación, usted tendría que encontrar el ID de proceso del Muelle y enviar una señal (este es el mismo que killall ¿), la obtención de Identificadores de proceso y el envío de señales también está más allá del alcance de esa respuesta.

Legado de Respuesta (León y anteriores)

Usted está en el camino correcto.Si usted escribir una aplicación en Carbono/Cacao, sólo tienes que cargar el archivo de preferencias.Se encuentra en

/Users/<current-user>/Library/Preferences/com.apple.desktop.plist

El diccionario contiene un sub-diccionario con la clave default y este sub diccionario contiene una clave ImageFilePath, que contiene la ruta absoluta al archivo de imagen.

Otros consejos

Puede hacerlo en shell + Applescript de esta manera:

#!/bin/bash
osascript -e 'tell app "finder" to get posix path of (get desktop picture as alias)'
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top