在 Windows 中根据时间更换壁纸

Change Wallpaper According to Time in Windows

我需要在启动时打开它才能在第 n 晚更改壁纸

Dim objShell
str1 = "C:\Users\AnB\Desktop\Texts\Projects\Project WallTime\Day.bat"
str2 = "C:\Users\AnB\Desktop\Texts\Projects\Project WallTime\Night.bat"
Set objShell = Wscript.CreateObject("WScript.Shell")
if hour(time) < 17 then
objShell.Run str1
if hour(time) > 16 then
objShell.Run str2
end if 
end if

这是将打开将更改 Reg

的批处理文件的 vbs

一天的批处理文件

@echo off
reg add "HKEY_CURRENT_USER\Control Panel\Desktop" /v Wallpaper /t REG_SZ /d "C:\Users\AnB\Desktop\Texts\Projects\Project WallTime\Day and Night\Day.png" /f
RUNDLL32.EXE user32.dll,UpdatePerUserSystemParameters

晚上的批处理文件

    @echo off
reg add "HKEY_CURRENT_USER\Control Panel\Desktop" /v Wallpaper /t REG_SZ /d "C:\Users\AnB\Desktop\Texts\Projects\Project WallTime\Day and Night\Night.png" /f
RUNDLL32.EXE user32.dll,UpdatePerUserSystemParameters

但是当我使用 vbs 时它没有更改注册表

请帮忙

谢谢

只需创建一个批处理文件,无需 VBS 和 运行 它。

注意!! rundll32.exe if being 运行 会造成延迟,所以如果这个 运行 不断地测试,它不会每次都更新。

@echo off
setlocal enabledelayedexpansion
set "Wtime=!time:~0,2!" 
if "!Wtime!" leq "17" reg add "HKEY_CURRENT_USER\Control Panel\Desktop" /v Wallpaper /t REG_SZ /d "C:\Users\AnB\Desktop\Texts\Projects\Project WallTime\Day and Night\Day.png" /f  & goto done
if "!Wtime!" geq "17" reg add "HKEY_CURRENT_USER\Control Panel\Desktop" /v Wallpaper /t REG_SZ /d "D:\C:\Users\AnB\Desktop\Texts\Projects\Project WallTime\Day and Night\Night.png" /f & goto done
:done
timeout /t 5 >nul
start "" /b RUNDLL32.EXE user32.dll,UpdatePerUserSystemParameters
endlocal

请记住,enabledelayedexpansion 在这里并不是真正需要的。

我会这样做,(特别是因为 %TIME% 的输出依赖于机器):

@Echo Off

Set "locn=%UserProfile%\Desktop\Texts\Projects\Project WallTime"
Set "rstr=Reg Add "HKCU\Control Panel\Desktop" /V Wallpaper /D "
Set "str1=%locn%\Day.bat"
Set "str2=%locn%\Night.bat"
Set /A "now=10%TIME:~,2%" 2>Nul

If %now:~-2% Lss 17 (%rstr% "%str1%" /F >Nul
) Else %rstr% "%str2%" /F >Nul
RunDll32 User32.dll,UpdatePerUserSystemParameters >Nul