reconoce proyector proyectar pantalla macbook mac externo externa duplicar dividir detecta conectar como osx wallpaper desktop-background

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)''