10

Недавно обновленный до Windows 8 мой скрипт для получения текущего изображения рабочего стола сломался.

Для Windows 7, как я могу узнать путь к текущему образу рабочего стола? это прекрасно работает. Однако этот раздел реестра теперь всегда содержит

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

Какой новый раздел реестра используется для Windows 8?

Я нашел два возможных решения.

Во-первых, этот ключ содержит то, что выглядит как закодированный путь Base64:

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

И еще есть "файл свойств пользовательской темы", который также содержит раздел «[SlideShow]», который выглядит как Base64:

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

7 ответов7

10

Два раздела реестра под обоими хранят исходный путь текущего фонового изображения:

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

Они в формате Unicode, после декодирования, у каждого будет полный путь к текущему изображению обоев.

3
  1. Перейти к команде запуска Windows (WinLogo+R)
  2. Введите:% AppData%
  3. В папке «Roaming» перейдите в «Microsoft», затем «Windwows», «Themes» и, наконец, «CachedFiles».
  4. Скопируйте файл обоев.
2

Проверьте значение HKEY_CURRENT_USER\Control Panel\Desktop\Wallpaper REG_SZ (строка). Это покажет вам путь к TranscodedWallpaper.jpg в настоящее время используется.

2

В Windows 8 и 8.1 (и, как сообщается, 10), если вы установили обои из Windows Picture Viewer (открыв изображение в Viewer и нажав "Установить в качестве обоев рабочего стола" в контекстном меню), его местоположение будет

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

Для Windows 8 или более поздней версии вы можете запустить этот файл VBS:

https://gist.github.com/raveren/ab475336cc69879a378b

Или используйте скрипт autohotkey:

http://www.autohotkey.com/board/topic/111813-open-current-wallpaper-under-mouse-in-windows-8/

Оба созданы мной.

1
  1. Перейдите в C:\Users\<USERNAME>\AppData\Roaming\Microsoft\Windows\Themes .
  2. Создать копию TranscodedWallpaper
  3. Переименуйте копию в <NAME>.JPG

Проверено на Windows 10

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)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .