मैं विंडोज 8 के लिए वर्तमान डेस्कटॉप छवि के लिए रास्ता कैसे खोज सकता हूं


10

हाल ही में विंडोज 8 में अपग्रेड होने के बाद, वर्तमान डेस्कटॉप वॉलपेपर छवि को पुनः प्राप्त करने के लिए मेरी स्क्रिप्ट टूट गई है।

विंडोज 7 के लिए, मैं वर्तमान डेस्कटॉप छवि के लिए रास्ता कैसे खोज सकता हूं? , यह बहुत अच्छा काम करता है। हालाँकि, उस रजिस्ट्री कुंजी में अब हमेशा समाहित है

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

विंडोज 8 के लिए उपयोग की जाने वाली नई रजिस्ट्री कुंजी क्या है?

मुझे दो संभावित उपाय मिले हैं।

सबसे पहले, इस कुंजी में Base64 एन्कोडेड पथ जैसा दिखता है:

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

और फिर "कस्टम थीम गुण फ़ाइल" है जिसमें एक "[स्लाइडशो]" खंड भी शामिल है जो बेस 64 की तरह दिखता है:

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 बाइट्स में गैर-स्ट्रिंग डेटा शामिल है, और शेष डेटा एक यूनिकोड एन्कोडेड, अशक्त-समाप्त (\ 0) स्ट्रिंग है। हैप्पी पार्सिंग।
नाथन टेलर

PowerShell में, यह है [System.Text.Encoding]::Unicode.GetString($bytes[24..($bytes.length-1)]), यह मानते हुए $bytesकुंजी का मान
NextInLine

2
फुल ट्विनलाइनर पॉवरशेल:$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]
मार्क हार्विस्टन

3
  1. विंडोज रन कमांड (WinLogo + R) पर जाएं
  2. इसमें टाइप करें:% AppData%
  3. 'रोमिंग' फ़ोल्डर में, 'Microsoft', फिर 'Windwows', फिर 'थीम्स' और अंत में 'CachedFiles' पर जाएं।
  4. वॉलपेपर फ़ाइल कॉपी करें।

यह इतना सीधा और त्वरित है। मैंने फ़ाइल को पकड़ लिया, एक्सटेंशन को .jpg में बदल दिया और वहाँ यह था।
वलिसाइडलव

2

HKEY_CURRENT_USER\Control Panel\Desktop\WallpaperREG_SZ (स्ट्रिंग) मान की जाँच करें । यह आपको वर्तमान में उपयोग किए जाने वाले TranscodedWallpaper.jpg के लिए रास्ता दिखाएगा।


धन्यवाद! मुझे कम से कम सही रजिस्ट्री स्थान की ओर इशारा किया। मैं न केवल वर्तमान वॉलपेपर बल्कि मूल फ़ाइल का पथ चाहता था (जैसे विंडो 7 ने किया था), जो ट्रांसकोडेडमेजचेचे प्रविष्टि में है।
स्कॉट बेनेट-मैकलेश


2

विंडोज 8 और 8.1 में (और, कथित तौर पर, 10), अगर आपने अपना वॉलपेपर विंडोज पिक्चर व्यूअर से सेट किया है (व्यूअर में एक चित्र खोलकर और संदर्भ मेनू में "डेस्कटॉप वॉलपेपर के रूप में सेट करें" पर क्लिक करके), इसका स्थान होगा

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

1

मेरी स्थिति में मेरे पास छवियों का एक विशाल फ़ोल्डर है जो मेरे वॉलपेपर चक्र के माध्यम से है। मैं थोड़ी देर के बाद कुछ ऊब गया और उन्हें हटाना चाहता हूं या कभी-कभी मुझे बस आश्चर्य होता है कि छवि का नाम क्या है क्योंकि इसमें छवि का विवरण हो सकता है।

मैंने ऊपर दिए गए फीडबैक के आधार पर 2 लिपियों का निर्माण किया - एक को वर्तमान छवि पथ और एक इसे हटाने के लिए। केवल विंडोज 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');

छवि हटाएं (हटाएं

$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

विंडोज 10 पर परीक्षण किया गया

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.