Récupérer les images de Windows Spotlight dans Windows 10 en PowerShell

Windows-10

Sous Windows 10, il existe une fonctionnalité qui permet de mettre un joli fond d’écran au niveau de l’écran de verrouillage de session : Windows Spotlight. Ce dernier est proposé automatiquement par Microsoft et changé chaque jour avec quelque-chose de nouveau (ou plus régulièrement si l’actuelle ne vous plaît pas puisque vous avez la possibilité d’évaluer chaque fond).

Il s’agit d’une fonctionnalité propre à Windows 10 mais qui ne change pas l’arrière-plan du bureau mais uniquement celui du verrouillage (lorsque vous faîtes WIN + L où que vous fermez votre session). En fait, c’est un peu comme l’application Bing Desktop… sauf qu’il n’y a pas la partie Bing 😉 !

Personnellement, je trouve que les images sont plutôt très sympas alors j’ai voulu les récupérer afin de les utiliser également comme fond d’écran.

Etape 1 – Activer l’option, localiser les images et procéder manuellement

Première étape, vous devez activer l’option sur votre PC : Paramètres > Personnalisation puis Ecran de verrouillage et choisissez Windows Spotlight dans le menu déroulant.

Capture_03

Une fois que c’est fait, vous devriez pouvoir accéder au dossier caché suivant :

%localappdata%\Packages\

Microsoft.Windows.ContentDeliveryManager_cw5n1h2txyewy\

LocalState\Assets

(rassemblez les lignes, c’est simplement pour éviter de casser le formatage du site)

C’est le dossier dans lequel sont stockées les images. Pour y accéder, copiez-collez le chemin précédent dans votre Explorateur Windows ou directement dans la fenêtre qui apparaît lorsque vous appuyez sur WINDOWS + R.

Capture_01

Vous devez voir un dossier similaire avec des fichiers étranges :

Capture_02

Bien que ces fichiers ne s’ouvrent pas, il s’agit bien des images utilisées par Windows Spotlight.

Créez un nouveau dossier de travail sur votre bureau (ou ailleurs) et copiez-collez y tous ces fichiers.

Appuyez maintenant sur SHIFT + cliquez sur le bouton gauche de votre souris. Dans le menu contextuel qui apparaît, choisissez l’option Open command window here / Ouvrir commandes Windows ici.

Exécutez la commande suivante :

Ren *.* *.jpg

Capture_05

Pas de stress, on ne fait rien de grave. On renomme simplement tous les fichiers de notre dossier de travail en ajoutant à la fin l’extension .JPG. De cette façon, nos fichiers seront bien identifiés par le système comme des images et nous pourrons alors les ouvrir.

Capture_07

Il vous reste maintenant à :

  • Faire le trie entre les images et les résidus non souhaités comme le logo du jeu de bonbons (dont le nom de me revient pas au moment ou j’écris cet article), celui de Flipboard, la tête d’oiseau (dont on se demande ce qu’il fait là), etc.
  • Différencier les images qui sont au format Portrait ou Paysage. En effet, vous trouverez des images au format Portrait qui sont utilisées pour Windows Spotlight sur Windows Phone mais qui ne donneront rien de bon sur votre Windows 10 de bureau ! 😉

Une fois que c’est bon, il vous suffit de vous créer un dossier dans vos Documents et d’y mettre toutes les images que vous souhaitez conserver comme fonds d’écran possibles.

Ensuite, il ne vous reste plus qu’à activer l’option dans les paramètres :

Capture_07

Activez l’option Slideshow puis définissez votre dossier qui contient toutes les images (que j’ai appelé personnellement Wallpapers_PC).

De cette façon, votre écran de verrouillage de session et votre fond d’écran utilisent désormais le même lot d’images qui provient de Windows Spotlight.

C’est terminé ! 🙂

Concrètement ça marche, mais le désavantage de cette solution et que vous devrez régulièrement aller récupérer les images dans le dossier caché de Windows Spotlight, puis les copier-coller dans votre dossier, puis ajouter l’extension JPG afin de pouvoir utiliser les nouvelles images… Sinon, vous n’aurez que les images disponibles à l’instant où vous avez réalisé la manipulation. 🙁

Original article

Etape 2 – Automatiser la récupération des images en PowerShell

Heureusement, il est possible d’automatiser cela.

Créez vous un dossier Windows_Spotlight dans lequel vous allez créer 2 nouveaux dossiers : PC et Smartphone.

Capture_09

$me = $env:username
$source = "C:\Users\$me\AppData\Local\Packages\
Microsoft.Windows.ContentDeliveryManager_cw5n1h2txyewy\LocalState\Assets"
$target_pc = "C:\Users\$me\Pictures\Windows_Spotlight\PC"
$target_phone = "C:\Users\$me\Pictures\Windows_Spotlight\Phone"

Write-Host "[DEBUG] - Starting importing Windows Spotlight wallpapers..."

# Testing if the folder Windows Spotlight Exists
if ((Test-Path $target_pc) -eq $false)
{
 # Creating the folder if not exist
 Write-Host "[ERROR] - Check folder creation"
 Break
}

# Get all the images in the hidden folder of Windows Spotlight
$images = Get-ChildItem $source

# For each image
foreach ($wallpaper in $images)
{
 # If the file has NOT been already imported by previous script execution
 # We will : import/copy it, then rename it by adding the jpg extension
 if ((Test-Path $target_pc\$wallpaper.jpg) -eq $false)
 {
 # Copy
 Copy-Item $source\$wallpaper -Destination $target_pc
 # Rename
 Rename-Item $target_pc\$wallpaper -NewName $target_pc\$wallpaper.jpg
 # Log
 Write-Host "$wallpaper copied and added JPG extension into $target_pc folder !"
 }

 else 
 {
 Write-Host "$wallpaper has been already imported !"
 }

 # Clearing the images that are probably not true image that can be used as wallpapers
 # In fact, removing all the files under 100 000 bytes
 if ((Get-Item $target_pc\$wallpaper.jpg).Length -lt 100000)
 {
 Write-Host "$wallpaper removed (probably not wallpapers)"
 Remove-Item $target_pc\$wallpaper.jpg
 }
 
 # At this step, we have only true images that can be used for PC but also for Phone !
 # We will get the Height / Width details of each picture
 # Only if the image exists
 if ((Test-Path $target_pc\$wallpaper.jpg) -eq $true)
 {
 $image_details = Get-Image $target_pc\$wallpaper.jpg

 # If, Width is larger that Height therefore is landscape / paysage
 if ($image_details.Height -le $image_details.Width)
 {
 Write-Host "$wallpaper is a Landscape - We keep it in the current folder"
 }

 # Otherwise height is Larger than Width - It's for Phone
 else
 {
 Write-Host "$wallpaper is a Portrait - Moved for Phone usage"
 # File has been already move in previous import - so its removed
 if ((Test-Path $target_phone\$wallpaper.jpg) -eq $true)
 {
 Remove-Item $target_pc\$wallpaper.jpg
 }
 # New file, we move it in phone folder
 else
 {
 Move-Item -Path $target_pc\$wallpaper.jpg -Destination $target_phone
 } 
 } 
 }
}
# Ending script execution
Write-Host "Import of Windows Spotlight Wallpapers Done !"
Write-Host ("Number of Available Elements for PC Wallpapers : " + (Get-ChildItem $target_pc).Count)
Write-Host ("Number of Available Elements for Phone Wallpapers : " + (Get-ChildItem $target_phone).Count)

En gros, que fait-on :

  • On vérifie que notre dossier de travail est bien créé. Par défaut : C:\Users\vous\Pictures\Windows_Spotlight\PC
  • On récupère la liste de tous les fichiers disponibles dans le dossier caché de Windows Spotlight
  • Pour chaque fichier :
    • Si le fichier n’existe pas déjà (lors d’un précédent import), on copie le fichier dans notre dossier Windows_Spotlight\PC,
    • On le renomme en ajoutant l’extension de fichier .jpg à la fin,
    • On supprime tous les fichiers dont la taille est inférieure ou égale à 100 000 bytes car à priori il s’agira des logos et autres résidus comme je les ai appelé précédemment,
    • Si l’image n’a pas été supprimée, on récupère maintenant les dimensions height / width pour chaque image (pour cette partie j’utilise la fonction Get-Image extraite de PSImageTools – voir note à la fin).
      • Si l’image a une hauteur moins important que la largeur, il s’agit donc d’une image au format paysage, nous gardons donc le fichier dans notre dossier de travail Windows_Spotlight\PC
      • Sinon (la hauteur est plus importante) et c’est donc une image au format portrait. Nous déplaçons donc le fichier dans le dossier Windows_Spotlight\Phone (si cela n’a pas encore été fait dans un précédent import).
  • A la fin, on affiche le nombre d’images disponibles pour chaque dossier.

Capture_10

Capture_11

Capture_12

Capture_13

On voit bien que nous n’avons plus que des images fonctionnelles et utilisables et que chacun a été positionnée dans le répertoire qui lui convient en fonction de son format (paysage pour PC et portrait pour smartphone). 🙂

Etape 3 – Pour aller plus loin

Vous pouvez maintenant choisir de positionner votre dossier Windows_Spotlight dans votre DropBox ou dans OneDrive (ou autre). De cette façon, toutes les images seront disponibles depuis tous vos ordinateurs et/ou smartphone.

Mieux encore, vous pouvez également automatiser l’exécution de ce script via les tâches planifiées afin d’exécuter et faire une copie chaque jour des nouvelles images proposées par Microsoft ! 😉

N’hésitez pas à personnaliser le code selon vos besoin car même si ça fait le boulot, il y a moyen d’améliorer ça. Par exemple, vous pourriez créer les dossiers automatiquement (là où j’ai choisi de Break si  jamais le dossier n’est pas conforme).

La fonction Get-Image que j’utilise provient du pack PSImageTools disponible sur GitHub. Elle n’a pas du tout été modifiée et je l’utilise telle que fournit pas son auteur. Plus d’informations sur GitHub. Merci à lui ! 🙂

Téléchargement : spotlight_wallpapers v2 blog.