Pergunta

Como faço para obter o papel de parede atual em um Mac? Apenas me aponte para uma função API para que eu possa Google mais.

Edit: Eu acho que eu encontrei. [NSUserDefaults standardUserDefaults] mencionado em http://lists.apple.com /archives/student-dev/2004/Aug/msg00140.html

Também é possível a partir de shell: defaults ler fundo com.apple.desktop

E a partir AppleScript: http://discussions.apple.com/thread.jspa?messageID=7111272

Foi útil?

Solução

Atualizado Resposta (Mavericks e mais novos)

A partir do Mavericks, a Apple escreve as imagens de desktop para

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

que é um banco de dados SQLite. Você pode abrir este arquivo no terminal como este

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

e, em seguida, execute o seguinte 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 ;

A saída será

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

UID1 é a UID de uma tela (por exemplo, a exibição do seu MacBook, um monitor externo, etc. como cada tela pode ter uma imagem de fundo próprio), UID2 é opcional (por vezes está faltando, o que provavelmente significa que todos os espaços de que visor) e é o UID de um espaço (cada visualização no oS X pode ter vários espaços e cada espaço pode ter um próprio fundo iamge) e <PicturePath> é o caminho para a imagem (para este espaço específico sobre esta exibição específico).

Claro que você pode vincular sua App contra a biblioteca SQLite e fazer tudo isso com chamadas de biblioteca, mas como usar SQLite e a sintaxe SQL para consultas e atualização de dados são, naturalmente, muito além do escopo deste . resposta Apenas uma dica:. Você sair do cliente sqlite por .exit digitação (! observe o período anterior) e tecle enter (CTRL + C não vai funcionar)

Apenas mais uma nota: Você pode atualizar o banco de dados em seu aplicativo, mas isso não terá nenhum efeito como o Dock não vai saber sobre isso (você alterá-la nas suas costas). Para tornar o Dock consciente de que a mudança, você tem matá-lo como killall Dock, pode ser suficiente para apenas Hup-lo (killall -HUP Dock), que realmente não vai matá-lo (eu não testei isso). Dentro de um aplicativo, você teria que encontrar o ID do processo do Dock e enviá-lo um sinal (este é o mesmo que killall faz), ficando IDs de processo e envio de sinais também é além do escopo dessa resposta.

Legado Resposta (Lion e anteriores)

Você está no caminho certo. Se você escrever uma aplicação em Carbon / cacau, basta carregar o arquivo de preferência. Ele está localizado no

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

O dicionário contém um sub-dicionário com a default chave e esta sub dicionário contém um ImageFilePath chave, que contém o caminho absoluto para o arquivo de imagem.

Outras dicas

Você pode fazê-lo com casca + Applescript assim:

#!/bin/bash
osascript -e 'tell app "finder" to get posix path of (get desktop picture as alias)'
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top