不使用regedit更改桌面背景

时间:2015-11-02 17:28:42

标签: windows batch-file vbscript

有没有办法在不编辑注册表的情况下更改Windows计算机的桌面背景?因为这个程序将在不同的计算机上运行,​​这可能会影响Usb驱动器号是否有一个vbs将检查它是什么驱动器号并将复制照片(我需要文件来源的驱动器号复制它)到当地的车道。有人知道怎么做吗? TIA

2 个答案:

答案 0 :(得分:1)

您可以创建Powershell脚本文件set_desktop_background.ps1

Push-Location
cd HKCU:\
Set-Itemproperty -path 'HKEY_CURRENT_USER\Control Panel\Desktop' -Name 'WallPaper' -value ''
add-type -typedefinition "using System;`n using System.Runtime.InteropServices;`n public class PInvoke { [DllImport(`"user32.dll`")] public static extern bool SetSysColors(int cElements, int[] lpaElements, int[] lpaRgbValues); }"
[PInvoke]::SetSysColors(1, @(1), @(0x663309))
Start-Process "taskkill.exe" -ArgumentList "/F /IM explorer.exe" -Wait -WindowStyle Hidden
Start-Process "explorer.exe" -WindowStyle Hidden
Pop-Location

然后通过

调用它
powershell -File C:\desktop_background\set_desktop_background.ps1 -WindowStyle Hidden

答案 1 :(得分:0)

不,您需要编辑注册表,这是根据图像引用方式的定义。

正如上述评论者所提到的,有办法解决这个问题。首先,您可以尝试相对路径而不是绝对路径。在下面的代码中,当然要删除消息框。

Set WshShell = CreateObject("WScript.Shell")
msgbox WshShell.CurrentDirectory 'This returns the path of your script

要获取脚本的完整路径,只需使用

即可
msgbox WScript.ScriptFullName

对于奖励积分,我们可以使用

msgbox CreateObject("Scripting.FileSystemObject").GetParentFolderName(WScript.ScriptFullName)

这可以消除对驱动器号或文件夹所在位置的任何担忧。如果需要,可以使用以下内容来提取驱动器号。

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objShell = CreateObject("Wscript.Shell")

strPath = objShell.CurrentDirectory
strDrive = objFSO.GetDriveName(strPath)

msgbox strDrive

使脚本复杂化的一点是,您希望确保在删除闪存驱动器后桌面图片仍然可用。你有两个选择。一,您可以将照片复制到C:上的安全位置。或者,我要做的是在VBS中添加一个监听器,检查X:驱动器是否仍然可读。拔下闪存驱动器后,vbs将继续运行,因此它会注意到驱动器已经消失,然后将更改桌面映像。

一些psudocode:

Read the reg desktop location
Back it up
write new location
refresh desktop
Call Secondary Script (OR LOOP NOW to watch the drive)

根据脚本的功能,让它调用另一个检查闪存驱动器的脚本,或者只是在主脚本中有一个循环。我只需要调用另一个脚本,这样你就可以自由地在主要脚本中执行任何其他操作。如果您还有其他问题,请与我们联系!

相关问题