¿Cómo podría encontrar la ruta a la imagen de escritorio actual para Windows 8?


10

Habiendo actualizado recientemente a Windows 8, mi secuencia de comandos para recuperar la imagen de fondo de escritorio actual se ha roto.

Para Windows 7, ¿cómo podría encontrar la ruta a la imagen de escritorio actual? , esto funciona muy bien. Sin embargo, esa clave de registro ahora siempre contiene

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

¿Cuál es la nueva clave de registro utilizada para Windows 8?

He encontrado dos posibles soluciones.

En primer lugar, esta clave contiene lo que parece una ruta codificada en Base64:

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

Y luego está el "archivo de propiedades de tema personalizado" que también contiene una sección "[SlideShow]" que se parece a Base64:

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

Estoy interesado en las entradas de registro aparentemente (pero aparentemente no) codificadas en base64. ¿Por qué Microsoft los codificaría así? ¿Qué se gana escondiendo esa información básica?
Synetech

Respuestas:


10

Las dos claves de registro a continuación almacenan la ruta original de la imagen de fondo actual:

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

Están en formato Unicode, al decodificar eso, uno tendrá la ruta completa a la imagen de fondo de pantalla actual.


2
Solo una aclaración para cualquiera que esté jugando con esto: el valor contiene datos que no son de cadena en los primeros 24 bytes, y los datos restantes son una cadena codificada en Unicode, terminada en nulo (\ 0). Feliz análisis.
Nathan Taylor

En powershell, es [System.Text.Encoding]::Unicode.GetString($bytes[24..($bytes.length-1)]), suponiendo que $bytescontiene el valor de la clave
NextInLine

2
Powershell twoliner completo:$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. Vaya al comando Ejecutar de Windows (WinLogo + R)
  2. Escriba:% AppData%
  3. En la carpeta 'Roaming', vaya a 'Microsoft', luego 'Windwows', luego 'Temas' y finalmente 'CachedFiles'
  4. Copie el archivo de fondo de pantalla.

Esto es muy sencillo y rápido. Tomé el archivo, cambié la extensión a .jpg y ahí estaba.
valsidalv

2

Verifique el valor HKEY_CURRENT_USER\Control Panel\Desktop\WallpaperREG_SZ (cadena). Esto le mostrará la ruta al TranscodedWallpaper.jpg actualmente en uso.


¡Gracias! Eso me señaló la ubicación correcta del registro al menos. No solo quería el fondo de pantalla actual, sino también la ruta al archivo original (como lo hizo Windows 7), que está en la entrada TranscodedImageCache.
Scott Bennett-McLeish


2

En Windows 8 y 8.1 (y, según se informa, 10), si ha configurado su fondo de pantalla desde Windows Picture Viewer (abriendo una imagen en Viewer y haciendo clic en "Establecer como fondo de escritorio" en el menú contextual), su ubicación será

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

1

En mi situación, tengo una enorme carpeta de imágenes a través de las cuales mi fondo de pantalla pasa. Me aburro de algunos después de un tiempo y quiero eliminarlos o, a veces, me pregunto cuál es el nombre de la imagen porque puede tener la descripción de la imagen.

Creé 2 scripts basados ​​en los comentarios anteriores, uno para obtener la ruta de la imagen actual y otro para eliminarlo. Solo probé esto en Windows 10.

Obtenga la ruta de la imagen (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');

Eliminar la imagen (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. Ir a C:\Users\<USERNAME>\AppData\Roaming\Microsoft\Windows\Themes.
  2. Crea una copia de TranscodedWallpaper
  3. Cambiar el nombre de la copia a <NAME>.JPG

Probado en Windows 10

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.