현재 데스크톱 이미지의 경로를 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로 인코딩 된 레지스트리 항목에 관심이 있습니다. Microsoft는 왜 그런 식으로 인코딩합니까? 그 기본 정보를 숨겨서 얻는 것은 무엇입니까?
Synetech

답변:


10

아래의 두 레지스트리 키는 현재 배경 무늬 이미지의 원래 경로를 저장합니다.

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

그것들은 유니 코드 형식으로되어 있습니다. 해독하면 현재 배경 이미지의 전체 경로를 갖게됩니다.


2
이 문제를 해결하려는 사람을위한 설명 : 값에는 처음 24 바이트의 비 문자열 데이터가 들어 있고 나머지 데이터는 유니 코드로 인코딩 된 null 종료 (\ 0) 문자열입니다. 해피 파싱.
Nathan Taylor

Powershell에서는 [System.Text.Encoding]::Unicode.GetString($bytes[24..($bytes.length-1)]), 가정 $bytes 열쇠의 값을 포함한다.
NextInLine

2
전체 twoliner 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

3
  1. Windows 실행 명령 (WinLogo + R)으로 이동하십시오.
  2. 입력 : % AppData %
  3. '로밍'폴더에서 'Microsoft', 'Windwows', '테마', 그리고 마지막으로 'CachedFiles'
  4. 배경 화면 파일을 복사하십시오.

이것은 매우 간단하고 신속합니다. 나는 파일을 움켜 잡고 .jpg로 확장을 변경했다.
valsidalv

2

을 체크 해봐 HKEY_CURRENT_USER\Control Panel\Desktop\Wallpaper REG_SZ (문자열) 값입니다. 그러면 현재 사용중인 TranscodedWallpaper.jpg의 경로가 표시됩니다.


고맙습니다! 그것은 적어도 정확한 레지스트리 위치로 나를 가리켰다. 나는 현재 배경 화면을 원했을뿐 아니라 TranscodedImageCache 항목에있는 원본 파일 (Window 7처럼)에 대한 경로를 원했습니다.
Scott Bennett-McLeish


2

Windows 8 및 8.1 (및 전하는 바에 따르면 10)에서 Windows Picture 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');

이미지 삭제 (allpaper.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에서 테스트 됨

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.