উইন্ডোজ 8-র জন্য আমি কীভাবে বর্তমান ডেস্কটপ চিত্রটি পেতে পারি


10

উইন্ডোজ 8 এ সম্প্রতি আপগ্রেড হওয়ার পরে, বর্তমান ডেস্কটপ ওয়ালপেপার চিত্রটি পুনরুদ্ধার করার জন্য আমার স্ক্রিপ্টটি ভেঙে গেছে।

উইন্ডোজ 7 এর জন্য, আমি কীভাবে বর্তমান ডেস্কটপ চিত্রের পথটি খুঁজে পেতে পারি? , এটি দুর্দান্ত কাজ করে। তবে সেই রেজিস্ট্রি কীতে এখন সর্বদা থাকে

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

উইন্ডোজ 8 এর জন্য ব্যবহৃত নতুন রেজিস্ট্রি কী কী?

আমি দুটি সম্ভাব্য সমাধান খুঁজে পেয়েছি।

প্রথমত, এই কীটিতে বেস 64 এনকোডড পথের মতো দেখতে রয়েছে:

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

এবং তারপরে "কাস্টম থিম বৈশিষ্ট্যাবলী ফাইল" রয়েছে যা এতে একটি "[স্লাইডশো]" বিভাগ রয়েছে যা বেস 64 এর মতো দেখাচ্ছে:

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

আমি আপাতদৃষ্টিতে (তবে দৃশ্যত নয়) বেস 64-এনকোডেড রেজিস্ট্রি এন্ট্রিগুলিতে আগ্রহী। মাইক্রোসফ্ট তাদের কেন এমনভাবে এনকোড করবে? সেই প্রাথমিক তথ্যটি গোপন করে কী লাভ?
সিনিটেক

উত্তর:


10

উভয়ের নীচে দুটি রেজিস্ট্রি কী বর্তমান ওয়ালপেপার চিত্রের মূল পথটি সঞ্চয় করে:

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

তারা ইউনিকোড ফর্ম্যাটে রয়েছে, ডিকোডিংয়ের পরে একজনের বর্তমান ওয়ালপেপার চিত্রের পুরো পথ থাকবে।


2
যার সাথে এই সম্পর্কে গোলমাল করবেন তার জন্য কেবল একটি স্পষ্টতা: মানটিতে প্রথম 24 বাইটে নন-স্ট্রিং ডেটা রয়েছে এবং বাকী ডেটাটি ইউনিকোড এনকোডড, নাল-টার্মিনেটেড (\ 0) স্ট্রিং। শুভ পার্সিং
নাথান টেলর

পাওয়ারশেলের ক্ষেত্রে, [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. উইন্ডোজ রান কমান্ডে যান (উইনলোগো + আর)
  2. এতে টাইপ করুন:% অ্যাপডেটা%
  3. 'রোমিং' ফোল্ডারে, 'মাইক্রোসফ্ট', তারপরে 'উইন্ডো', তারপরে 'থিমস' এবং সর্বশেষে 'ক্যাশেডফাইলে' যান
  4. ওয়ালপেপার ফাইলটি অনুলিপি করুন।

এটি এত সোজা এবং দ্রুত। আমি ফাইলটি ধরলাম, এক্সটেনশনটি .jpg এ পরিবর্তন করেছি এবং এটি ছিল।
valsidalv

2

HKEY_CURRENT_USER\Control Panel\Desktop\WallpaperREG_SZ (স্ট্রিং) মানটি পরীক্ষা করুন । এটি আপনাকে বর্তমানে ব্যবহৃত ট্রান্সকোডেড ওয়ালপেপার.জপিগির পথ দেখাবে।


ধন্যবাদ! এটি আমাকে কমপক্ষে সঠিক রেজিস্ট্রি অবস্থানের দিকে ইঙ্গিত করেছে। আমি কেবল বর্তমান ওয়ালপেপারটিই চেয়েছিলাম না তবে আসল ফাইলের পথ (উইন্ডো 7 এর মত) যা ট্রান্সকোডডআইজেজক্যাচ এন্ট্রিতে রয়েছে।
স্কট বনেট-ম্যাকলেশ

2

উইন্ডোজ 8 বা তার পরে আপনি এই ভিবিএস ফাইলটি চালু করতে পারেন:

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

অথবা এই অটোহোটকি স্ক্রিপ্টটি ব্যবহার করুন:

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

দুটোই আমার দ্বারা তৈরি।


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');

চিত্র মুছুন (মুছে ফেলুন wallpaper.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

উইন্ডোজ 10 এ পরীক্ষা করা হয়েছে

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.