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

两盒软妹~` 提交于 2019-12-24 14:36:02

问题


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".


回答1:


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.)




回答2:


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.




回答3:


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)



来源:https://stackoverflow.com/questions/4321915/is-there-a-windows-registry-entry-for-the-original-background-location

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!