最近Windows 8にアップグレードしたため、現在のデスクトップの壁紙画像を取得するためのスクリプトが壊れています。
Windows 7の場合 現在のデスクトップイメージへのパスを見つけるにはどうすればよいですか? 、これはうまく機能します。ただし、このレジストリキーには常に
C:\Windows\web\wallpaper\Windows\img0.jpg
Windows 8で使用される新しいレジストリキーは何ですか?
私は2つの可能な解決策を見つけました。
まず、このキーには、Base64でエンコードされたパスのようなものが含まれます。
HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Wallpapers\Images\ID2
そして、Base64のような「[SlideShow]」セクションも含む「カスタムテーマプロパティファイル」があります。
C:\Users\Scott\AppData\Local\Microsoft\Windows\Themes\Custom.theme
両方の下にある2つのレジストリキーには、現在の壁紙画像の元のパスが格納されています。
HKEY_CURRENT_USER\Control Panel\Desktop\TranscodedImageCache
HKEY_CURRENT_USER\Control Panel\Desktop\TranscodedImageCache_000
それらはUnicode形式であり、それをデコードすると、現在の壁紙画像への完全なパスが得られます。
HKEY_CURRENT_USER\Control Panel\Desktop\Wallpaper
REG_SZ(文字列)値。これにより、現在使用中のTranscodedWallpaper.jpgへのパスが表示されます。
Windows 8および8.1(および報告によると10)で、Windowsピクチャービューアーから壁紙を設定した場合(ビューアーで写真を開き、コンテキストメニューの[デスクトップの壁紙に設定]をクリックして)、その場所は
%AppData%\Roaming\Microsoft\Windows Photo Viewer\Windows Photo Viewer Wallpaper.jpg
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/
どちらも私が作成しました。
C:\Users\<USERNAME>\AppData\Roaming\Microsoft\Windows\Themes
にアクセスします。TranscodedWallpaper
のコピーを作成<NAME>.JPG
に変更しますWindows 10でテスト済み
私の状況では、壁紙が循環する画像の巨大なフォルダがあります。しばらくすると飽きてしまい、削除したい場合があります。または、画像の説明が含まれている可能性があるため、画像の名前が何なのか疑問に思うことがあります。
上記のフィードバックに基づいて、2つのスクリプトを作成しました。1つは現在の画像パスを取得するスクリプトで、もう1つは削除するスクリプトです。これは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)