对于Windows 8,我如何找出当前桌面映像的路径


10

最近已升级到Windows 8,我检索当前桌面墙纸图像的脚本已损坏。

对于Windows 7,我如何找到当前桌面映像的路径?,效果很好。但是,该注册表项现在始终包含

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

Windows 8使用了什么新的注册表项?

我找到了两种可能的解决方案。

首先,此密钥包含看起来像是Base64编码的路径:

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

然后是“自定义主题属性文件”,其中还包含一个类似于Base64的“ [SlideShow]”部分:

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

我对看似(但显然不是)base64编码的注册表项感兴趣。微软为什么要这样编码它们?隐藏这些基本信息有什么好处?
Synetech '17

Answers:


10

下面的两个注册表项均存储当前墙纸图像的原始路径:

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

它们采用Unicode格式,经过解码后,将拥有当前墙纸图像的完整路径。


2
这只是对任何对此有疑问的人的澄清:该值在前24个字节中包含非字符串数据,而其余数据是Unicode编码的,以零结尾(\ 0)的字符串。解析愉快。
内森·泰勒

在powershell中,它是[System.Text.Encoding]::Unicode.GetString($bytes[24..($bytes.length-1)]),假设$bytes包含密钥的值
NextInLine 2015年

2
完整的doubleliner powershell:$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 '16

3
  1. 转到Windows运行命令(WinLogo + R)
  2. 输入:%AppData%
  3. 在“漫游”文件夹中,依次转到“ Microsoft”,“ Windwows”,“主题”和“ CachedFiles”
  4. 复制墙纸文件。

这是如此简单快捷。我抓起文件,将扩展名更改为.jpg,就到了。
valsidalv 2015年

2

检查HKEY_CURRENT_USER\Control Panel\Desktop\WallpaperREG_SZ(字符串)值。这将向您显示当前正在使用的TranscodedWallpaper.jpg的路径。


谢谢!这至少使我指向了正确的注册表位置。我不仅想要当前的墙纸,还想要原始文件的路径(如Window 7一样),该路径位于TranscodedImageCache条目中。
Scott Bennett-McLeish 2012年


2

在Windows 8和8.1(据报道为10)中,如果您已通过Windows Picture Viewer设置了墙纸(通过在Viewer中打开图片并在上下文菜单中单击“设置为桌面墙纸”),则其位置将为

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

1

在我的情况下,我有一个很大的图像文件夹,我的墙纸会循环通过这些图像。一段时间后,我感到有些无聊,想要删除它们,或者有时我只是想知道映像名称是什么,因为它可以包含映像的描述。

我根据以上反馈构建了2个脚本-一个用于获取当前图像路径,另一个用于删除它。仅在Windows 10上对此进行了测试。

获取图像路径(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');

删除图像(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. 转到C:\Users\<USERNAME>\AppData\Roaming\Microsoft\Windows\Themes
  2. 创建一个副本 TranscodedWallpaper
  3. 将副本重命名为 <NAME>.JPG

在Windows 10上测试

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.