简体   繁体   中英

Is there a windows registry entry for the original background location?

Is there a windows registry entry for the original background location? At "HKEY_CURRENT_USER\\Control Panel\\Desktop", the value "Wallpaper" is "C:\\Users\\CURRENTUSER\\AppData\\Roaming\\Microsoft\\Windows\\Themes\\TranscodedWallpaper.jpg".

It actually depends how the wallpaper got there.

This works on Windows 7, when the wallpaper is set via the control panel and wallpaper slideshows are enabled:

HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Desktop\General\WallpaperSource

In other situations, however, that key may not exist or may be stale.

(Ignore the fact it has "Internet Explorer" in the path. Who knows why that is, but IE isn't involved!)

(FWIW, I found/used this when making a desktop context menu (via VBScript) to delete the current wallpaper. Here it is if it's useful.)

In gpedit, the "Active Desktop Wallpaper" setting in User Configuration|Administrative Templates|Desktop|Active Desktop does set the background. Ignore the fact that it's in the Active Desktop section, as it still works with Active Desktop disabled. Active Desktop only needs to be enabled if using JPG or HTML for the background.

You can write custom vb script and right click menu.

--- Create reg file and double click.

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\DesktopBackground\Shell\DesktopWallpaperLocation]
"icon"="imageres.dll,-5346"
@="Desktop Wallpaper Location"

[HKEY_CLASSES_ROOT\DesktopBackground\Shell\DesktopWallpaperLocation\command]
@=hex(2):77,00,73,00,63,00,72,00,69,00,70,00,74,00,20,00,22,00,25,00,77,00,69,\
  00,6e,00,64,00,69,00,72,00,25,00,5c,00,53,00,79,00,73,00,74,00,65,00,6d,00,\
  33,00,32,00,5c,00,57,00,61,00,6c,00,6c,00,70,00,61,00,70,00,65,00,72,00,50,\
  00,61,00,74,00,68,00,2e,00,76,00,62,00,73,00,22,00,00,00

This will create a link to right menu like "Desktop Wallpaper Location" and it will open as selected in explorer.

--- Vb script file (edited for multiple monitors).

Const HKCU = &H80000001 'HKEY_CURRENT_USER

sComputer = "."

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

sKeyPath = "Control Panel\Desktop\"
sValueName = "TranscodedImageCache_001"
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

arrValues = Split(sContents, "\\")
b = ubound(arrValues)
result = arrValues(0)

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

sValueName = "TranscodedImageCache_000"
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

arrValues = Split(sContents, "\\")
b = ubound(arrValues)
result = arrValues(0)

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

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

arrValues = Split(sContents, "\\")
b = ubound(arrValues)
result = arrValues(0)

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

Save as *.vbs file and copy to c:\\windows\\system32 folder. (c:\\windows\\system32\\WallpaperPath.vbs)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM