Windows 8 için geçerli masaüstü görüntüsünün yolunu nasıl bulabilirim


10

Son zamanlarda Windows 8'e yükselttikten sonra, mevcut masaüstü duvar kağıdı resmini almak için komut dosyam bozuldu.

Windows 7 için, geçerli masaüstü görüntüsünün yolunu nasıl bulabilirim? , bu harika çalışıyor. Ancak, bu kayıt defteri anahtarı artık her zaman

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

Windows 8 için kullanılan yeni kayıt defteri anahtarı nedir?

İki olası çözüm buldum.

İlk olarak, bu anahtar Base64 kodlu bir yola benzeyen bir şey içerir:

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

Ve sonra Base64'e benzeyen bir "[SlideShow]" bölümü içeren "özel tema özellikleri dosyası" var:

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

Görünüşe göre (ama görünüşte değil) base64 kodlu kayıt defteri girdileri ile ilgileniyorum. Microsoft neden bunları böyle kodlasın ki? Bu temel bilgileri gizlemekten ne kazanacaksınız?
Synetech

Yanıtlar:


10

Aşağıdaki iki kayıt defteri anahtarı, geçerli duvar kağıdı görüntüsünün orijinal yolunu saklar:

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

Kod çözüldükten sonra, geçerli duvar kağıdı görüntüsünün tam yoluna sahip olacakları Unicode biçimindedirler.


2
Sadece bununla uğraşan herkes için bir açıklama: değer ilk 24 baytta dize olmayan veriler içerir ve kalan veriler Unicode kodlu, boş sonlu (\ 0) dizedir. Mutlu ayrıştırma.
Nathan Taylor

Powershell olarak, bu [System.Text.Encoding]::Unicode.GetString($bytes[24..($bytes.length-1)]), varsayarak $bytesanahtarının değerini içerir
NextInLine

2
tam 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 Çalıştır Komutuna git (WinLogo + R)
  2. Şunu yazın:% AppData%
  3. 'Dolaşım' klasöründe 'Microsoft', ardından 'Windwows', 'Temalar' ve son olarak 'CachedFiles'
  4. Duvar kağıdı dosyasını kopyalayın.

Bu çok basit ve hızlı. Dosyayı yakaladım, uzantıyı .jpg olarak değiştirdim ve işte oradaydı.
valsidalv

2

HKEY_CURRENT_USER\Control Panel\Desktop\WallpaperREG_SZ (dize) değerini kontrol edin . Bu, şu anda kullanımda olan TranscodedWallpaper.jpg dosyasının yolunu gösterecektir.


Teşekkür ederim! Bu beni en azından doğru kayıt defteri konumuna işaret etti. Sadece geçerli duvar kağıdı değil TranscodedImageCache girişinde olan orijinal dosya (Pencere 7 gibi) yolu istedim.
Scott Bennett-McLeish


2

Windows 8 ve 8.1'de (ve bildirildiği gibi, 10), duvar kağıdınızı Windows Resim Görüntüleyicisi'nden ayarladıysanız (Viewer'da bir resim açıp bağlam menüsünde "Masaüstü duvar kağıdı olarak ayarla" yı tıklatarak)

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

1

Benim durumumda, duvar kağıdımın devir yaptığı devasa bir görüntü klasörüm var. Bir süre sonra biraz sıkıldım ve onları silmek istiyorum veya bazen görüntü adının ne olduğunu merak ediyorum çünkü görüntünün açıklamasına sahip olabilir.

Yukarıdaki geribildirime dayalı 2 komut dosyası oluşturdum - biri geçerli görüntü yolunu almak için diğeri silmek için. Bunu yalnızca Windows 10'da test etti.

Görüntü yolunu al (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');

Görüntüyü silin (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. Adresine gidin C:\Users\<USERNAME>\AppData\Roaming\Microsoft\Windows\Themes.
  2. Şunun bir kopyasını oluşturun: TranscodedWallpaper
  3. Kopyayı şu şekilde yeniden adlandırın: <NAME>.JPG

Windows 10'da test edildi

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.