osx - proyector - Obtener fondo de escritorio en Mac
monitor externo mac (2)
¿Cómo obtengo el fondo de pantalla actual en una Mac? Solo apúntame a una función API para que pueda buscar más.
Editar: Creo que lo encontré. [NSUserDefaults standardUserDefaults] mencionado en http://lists.apple.com/archives/student-dev/2004/Aug/msg00140.html
También es posible desde shell: defaults read com.apple.desktop Background
Y de AppleScript: http://discussions.apple.com/thread.jspa?messageID=7111272
Respuesta actualizada (Mavericks y más reciente)
Comenzando con Mavericks, Apple escribe las imágenes de escritorio en
/Users/<current-user>/Application Support/Dock/desktoppicture.db
que es una base de datos SQLite. Puedes abrir este archivo en Terminal como este
sqlite3 "/Application Support/Dock/desktoppicture.db"
y luego ejecuta el siguiente SELECCIONAR:
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 su MacBook, una pantalla externa, etc. ya que cada pantalla puede tener su propia imagen de fondo), UID2
es opcional (a veces falta, lo que probablemente significa todos los espacios de esa pantalla) y es el UID de un espacio (cada pantalla en OS X puede tener múltiples espacios y cada espacio puede tener una imagen de fondo propia) y <PicturePath>
es la ruta a la imagen (para este espacio específico en esta pantalla específica).
Por supuesto, puede vincular su aplicación con la biblioteca SQLite y hacer todo eso con llamadas a bibliotecas, pero cómo usar SQLite y la sintaxis SQL para consultas y actualizar datos están, por supuesto, más allá del alcance de esta respuesta. Solo un consejo: sqlite
cliente sqlite
escribiendo .exit
(¡tenga en cuenta el período inicial!) Y presione enter (CTRL + C no funcionará).
Solo una nota más: puedes actualizar la base de datos en tu aplicación, pero eso no tendrá ningún efecto ya que el Dock no lo sabrá (lo cambias por detrás). Para hacer que el Dock esté al tanto de ese cambio, lo has matado como killall Dock
, puede ser suficiente para HUP ( killall -HUP Dock
), que en realidad no lo matará (no lo he probado). Dentro de una aplicación, tendrías que encontrar la ID del proceso del Dock y enviarle una señal (esto es lo mismo que hace killall
), obtener ID de procesos y enviar señales también está fuera del alcance de esa respuesta.
Legacy Answer (León y anteriores)
Estás en el camino correcto. Si escribe una aplicación en Carbon / Cocoa, simplemente cargue el archivo de preferencias. Está localizado en
/Users/<current-user>/Library/Preferences/com.apple.desktop.plist
El diccionario contiene un sub-diccionario con la clave default
y este diccionario secundario contiene una clave ImageFilePath
, que contiene la ruta absoluta al archivo de imagen.
Puedes hacerlo en shell + Applescript así:
#!/bin/bash
osascript -e ''tell app "finder" to get posix path of (get desktop picture as alias)''