Question

Comment puis-je obtenir le papier peint actuel sur un Mac? Indiquez-moi simplement une fonction API afin que je puisse utiliser davantage Google.

Edit: Je pense l’avoir trouvé. [NSUserDefaults standardUserDefaults] mentionné à l'adresse http://lists.apple.com /archives/student-dev/2004/Aug/msg00140.html

Également possible à partir du shell: lecture par défaut de com.apple.desktop Background

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

Était-ce utile?

La solution

Réponse mise à jour (Mavericks et plus récents)

À partir de Mavericks, Apple écrit les images du bureau sur

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

qui est une base de données SQLite. Vous pouvez ouvrir ce fichier dans Terminal comme ceci

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

puis exécutez le SELECT suivant:

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 ;

Le résultat sera

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

UID1 est l'UID d'un écran (par exemple, l'affichage de votre MacBook, un écran externe, etc. Chaque écran pouvant avoir sa propre image d'arrière-plan), UID2 est facultatif (parfois, il manque, ce qui désigne tous les espaces de cet affichage) et il s’agit de l’UID d’un espace (chaque affichage sous OS X peut avoir plusieurs espaces et chaque espace peut avoir son propre arrière-plan iamge) et <PicturePath> est le chemin de l’image (pour cet espace spécifique). sur cet affichage spécifique).

Bien sûr, vous pouvez lier votre application à la bibliothèque SQLite et faire tout cela avec des appels de bibliothèque, mais l'utilisation de SQLite et de la syntaxe SQL pour les requêtes et la mise à jour des données dépasse, bien entendu, le cadre de cette answer. Juste un conseil: vous quittez le sqlite client en tapant .exit (notez la période au début!) et en appuyant sur Entrée (CTRL + C ne fonctionnera pas).

Encore une remarque: vous pouvez mettre à jour la base de données dans votre application, mais cela n'aura aucun effet car le Dock ne le saura pas (vous le changez derrière son dos). Pour que le Dock soit conscient de ce changement, vous devez le tuer comme killall Dock, cela suffit peut-être simplement pour le HUP (killall -HUP Dock), ce qui ne le tuera pas vraiment (je n'ai pas testé cela). Dans une application, vous devez rechercher l'ID de processus du Dock et lui envoyer un signal (identique à celui utilisé par killall). Obtenir les ID de processus et envoyer des signaux dépasse également le cadre de cette réponse.

Réponse héritée (Lion et versions antérieures)

Vous êtes sur la bonne voie. Si vous écrivez une application dans Carbon / Cocoa, chargez simplement le fichier de préférences. Il est situé dans

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

Le dictionnaire contient un sous-dictionnaire avec la clé default et ce sous-dictionnaire contient une clé ImageFilePath, contenant le chemin absolu du fichier image.

Autres conseils

Vous pouvez le faire en shell + Applescript comme ceci:

#!/bin/bash
osascript -e 'tell app "finder" to get posix path of (get desktop picture as alias)'
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top