Come ho potuto scoprire il percorso dell'immagine desktop corrente, per Windows 8


10

Dopo aver recentemente aggiornato a Windows 8, il mio script per recuperare l'immagine di sfondo del desktop corrente si è rotto.

Per Windows 7, come posso scoprire il percorso dell'immagine desktop corrente? , funziona alla grande. Tuttavia, quella chiave di registro ora contiene sempre

C:\Windows\web\wallpaper\Windows\img0.jpg

Qual è la nuova chiave di registro utilizzata per Windows 8?

Ho trovato due possibili soluzioni.

Innanzitutto, questa chiave contiene quello che sembra un percorso codificato Base64:

HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Wallpapers\Images\ID2

E poi c'è il "file delle proprietà del tema personalizzato" che contiene anche una sezione "[SlideShow]" che assomiglia a Base64:

C:\Users\Scott\AppData\Local\Microsoft\Windows\Themes\Custom.theme

Sono interessato alle voci di registro apparentemente (ma apparentemente non) codificate in base64. Perché Microsoft li codificherebbe così? Cosa guadagnare nascondendo queste informazioni di base?
Synetech,

Risposte:


10

Le due chiavi di registro sottostanti memorizzano entrambe il percorso originale dell'immagine di sfondo corrente:

HKEY_CURRENT_USER\Control Panel\Desktop\TranscodedImageCache
HKEY_CURRENT_USER\Control Panel\Desktop\TranscodedImageCache_000

Sono in formato Unicode, dopo averlo decodificato, si avrà il percorso completo dell'immagine di sfondo corrente.


2
Solo un chiarimento per chiunque si scherzi con questo: il valore contiene dati non stringa nei primi 24 byte e i dati rimanenti sono una stringa codificata Unicode, terminata con null (\ 0). Buon parsing.
Nathan Taylor,

In PowerShell, è [System.Text.Encoding]::Unicode.GetString($bytes[24..($bytes.length-1)]), assumendo $bytescontiene il valore della chiave
NextInLine

2
powershell full twoliner:$bytes=(New-Object -ComObject WScript.Shell).RegRead("HKEY_CURRENT_USER\Control Panel\Desktop\TranscodedImageCache_000"); $path=([System.Text.Encoding]::Unicode.GetString($bytes[24..($bytes.length-1)]) -split "\0")[0]
Mark Harviston,

3
  1. Vai al comando Esegui di Windows (WinLogo + R)
  2. Digita:% AppData%
  3. Nella cartella "Roaming", seleziona "Microsoft", quindi "Windwows", quindi "Temi" e infine "CacheFiles"
  4. Copia il file di sfondo.

Questo è così semplice e veloce. Ho preso il file, ho cambiato l'estensione in .jpg ed eccolo lì.
valsidalv,

2

Controllare il valore HKEY_CURRENT_USER\Control Panel\Desktop\WallpaperREG_SZ (stringa). Questo ti mostrerà il percorso di TranscodedWallpaper.jpg attualmente in uso.


Grazie! Questo mi ha indicato almeno la posizione corretta del registro. Non volevo solo lo sfondo corrente, ma il percorso del file originale (come fece Windows 7), che si trova nella voce TranscodedImageCache.
Scott Bennett-McLeish,


2

In Windows 8 e 8.1 (e, a quanto si dice, 10), se hai impostato lo sfondo da Windows Picture Viewer (aprendo un'immagine in Viewer e facendo clic su "Imposta come sfondo del desktop" nel menu contestuale), la sua posizione sarà

%AppData%\Roaming\Microsoft\Windows Photo Viewer\Windows Photo Viewer Wallpaper.jpg

1

Nella mia situazione ho una grande cartella di immagini attraverso cui il mio sfondo scorre ciclicamente. Mi annoio di alcuni dopo un po 'e voglio eliminarli o a volte mi chiedo solo quale sia il nome dell'immagine perché può avere la descrizione dell'immagine.

Ho creato 2 script in base al feedback precedente: uno per ottenere il percorso dell'immagine corrente e uno per eliminarlo. Testato solo su Windows 10.

Ottieni il percorso dell'immagine (getwallpaper.ps1)

$bytes=(New-Object -ComObject WScript.Shell).RegRead("HKEY_CURRENT_USER\Control Panel\Desktop\TranscodedImageCache")
$wallpaperpath=[System.Text.Encoding]::Unicode.GetString($bytes[24..($bytes.length-1)])
$wallpaperpath=$wallpaperpath.substring(0, $wallpaperpath.IndexOf("jpg", 0, $wallpaperpath.Length)+3)
write-output $wallpaperpath
Write-Host -NoNewLine 'Press any key to continue...';
$null = $Host.UI.RawUI.ReadKey('NoEcho,IncludeKeyDown');

Elimina l'immagine (deletewallpaper.ps1)

$bytes=(New-Object -ComObject WScript.Shell).RegRead("HKEY_CURRENT_USER\Control Panel\Desktop\TranscodedImageCache")
$wallpaperpath=[System.Text.Encoding]::Unicode.GetString($bytes[24..($bytes.length-1)])
$wallpaperpath=$wallpaperpath.substring(0, $wallpaperpath.IndexOf("jpg", 0, $wallpaperpath.Length)+3)
write-output $wallpaperpath
Write-Host -NoNewLine 'Delete the file (y=yes)?'
$KeyOption = 'Y','N'
while ($KeyOption -notcontains $KeyPress.Character) {
 $KeyPress = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
 if($KeyPress.Character -eq 'y') { Remove-Item $wallpaperpath }
}
Write-Host
[Environment]::Exit(0)

1
  1. Vai a C:\Users\<USERNAME>\AppData\Roaming\Microsoft\Windows\Themes.
  2. Crea una copia di TranscodedWallpaper
  3. Rinomina la copia in <NAME>.JPG

Testato su Windows 10

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.