Windows 7 为什么此批处理文件无法更改壁纸(Windows 7)

Windows 7 为什么此批处理文件无法更改壁纸(Windows 7),windows-7,Windows 7,我有一个脚本可以运行(没有错误)来更改桌面墙纸。唯一的问题是它不会改变壁纸。注册表项被适当地更改,以使位正常工作。只是重新加载不起作用 :: Configure Wallpaper REG ADD "HKCU\Control Panel\Desktop" /V Wallpaper /T REG_SZ /F /D "C:\Users\greynolds\AppData\Roaming\APOD Wallpaper\apod_wallpaper1.png" REG ADD "HKCU\Control

我有一个脚本可以运行(没有错误)来更改桌面墙纸。唯一的问题是它不会改变壁纸。注册表项被适当地更改,以使位正常工作。只是重新加载不起作用

:: Configure Wallpaper
REG ADD "HKCU\Control Panel\Desktop" /V Wallpaper /T REG_SZ /F /D "C:\Users\greynolds\AppData\Roaming\APOD Wallpaper\apod_wallpaper1.png"
REG ADD "HKCU\Control Panel\Desktop" /V WallpaperStyle /T REG_SZ /F /D 0
REG ADD "HKCU\Control Panel\Desktop" /V TileWallpaper /T REG_SZ /F /D 2
:: Make the changes effective immediately
%SystemRoot%\System32\RUNDLL32.EXE user32.dll, UpdatePerUserSystemParameters

UpdatePerUserSystemParameters是一个未记录的函数AFAIK

as:BOOL WINAPI UpdatePerUserSystemParameters(DWORD dwReserved,BOOL Enable)

(您最终将随机参数传递给函数)

根据我的经验,在撰写本文时,设置
HKCU\Control Panel\Desktop
更频繁的情况是行不通的


最好的解决方案是调用win32 api函数
SystemParametersInFosetWallpar
——它每次都有效。我发现这个powershell模块/代码段非常有用

这里介绍了如何调用此函数,但最好使用文档化的API:

RUNDLL32.EXE USER32.DLL,UpdatePerUserSystemParameters 1 True

谢谢你!你知道我怎样才能得到我想要的结果吗?这是非常令人沮丧的,因为它有时会工作,所有论坛等都说这是一种方法。@Greg:大多数时候,有人的代码使用RundL32,这是错误的!RunDll32设计使用的函数很少。我只是查看了可编写脚本的shell对象列表(),没有找到任何可以从windows脚本主机调用的函数,因此,您唯一的选择是使用外部程序,或者可能是使用IActiveDesktop COM对象的powershell脚本…感谢您的帮助-我对Windows脚本编写非常陌生。我认为外部程序看起来是可行的。