C#,如何使用相同的代码在win7和win10中获取当前的桌面墙纸?

时间:2018-06-29 06:50:28

标签: c# windows

如果我将图片设置为桌面墙纸,然后删除该图片。如何获取当前的桌面墙纸图像文件? 我知道注册表项“ HKEY_CURRENT_USER \ Control Panel \ Desktop \ Wallpaper ”存储了一个路径。但是win7和win10之间有所不同。

  • 在win7中,键“ WallPaper”的值始终为“ C:\ Users \ xxx \ AppData \ Roaming \ Microsoft \ Windows \ Themes \ TranscodedWallpaper.jpg
  • 在win10中,键“ WallPaper”的值是图片的路径(例如“ C:\ Users \ xxx \ Desktop \ 1.jpg ”)。 删除该文件时,无法通过此路径找到它。

因此,我无法读取注册表项来获取墙纸路径,在win10中没有用。有人有解决方案吗?

1 个答案:

答案 0 :(得分:0)

将图像设置为桌面背景时,将对其进行转换以匹配屏幕和位置首选项,例如填充,缩放,适合等。源图像的路径在以下注册表中以名为TranscodedImageCache的二进制值编写密钥:

HKEY_CURRENT_USER\Control Panel\Desktop

到注册表中作为二进制值的源图像的路径。

要从TranscodedImageCache值提取图像的路径,您需要运行以下脚本:

Const HKCU = &H80000001 'HKEY_CURRENT_USER

sComputer = "."   

Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" _
            & sComputer & "\root\default:StdRegProv")

sKeyPath = "Control Panel\Desktop\"
sValueName = "TranscodedImageCache"
oReg.GetBinaryValue HKCU, sKeyPath, sValueName, sValue


sContents = ""

For i = 24 To UBound(sValue)
  vByte = sValue(i)
  If vByte <> 0 And vByte <> "" Then
    sContents = sContents & Chr(vByte)
  End If
Next

CreateObject("Wscript.Shell").Run "explorer.exe /select,""" & sContents & """"

您可以将此文本粘贴到记事本中,然后将其另存为VBS文件