【发布时间】:2011-09-02 12:47:27
【问题描述】:
我有一个批处理脚本,可以让用户将背景从黑色更改为白色,反之亦然。我遇到的问题是脚本有时只会立即更改,而其他时候用户必须注销并重新登录才能更改背景。这是我目前所拥有的:
@echo off
call :quiet
exit /b
:quiet
:: For comparison, using the black wallpaper registry value
set "black=C:\Users\UserName\AppData\Roaming\Microsoft\Windows\Themes\MDCBackground_black.bmp"
:: Set reg query result to current
FOR /F "tokens=2* delims= " %%A IN ('REG QUERY "HKCU\Control Panel\Desktop" /v Wallpaper') DO SET current=%%B
:: For debugging purpose.
ECHO current=%current%
pause
if "%current%"=="%black%" (
call :MakeDayWallpaper>nul 2>&1
:: Make changes without requiring logoff
RUNDLL32.EXE user32.dll,UpdatePerUserSystemParameters
) else (
call :MakeNightWallpaper>nul 2>&1
:: Make changes without requiring logoff
RUNDLL32.EXE user32.dll,UpdatePerUserSystemParameters
)
EXIT /b
:MakeDayWallpaper
REG ADD "hkcu\control panel\desktop" /v wallpaper /t REG_SZ /d "" /f
REG ADD "hkcu\control panel\desktop" /v wallpaper /t REG_SZ /d "C:\Users\UserName\AppData\Roaming\Microsoft\Windows\Themes\MDCBackground_white.bmp" /f
REG DELETE "hkcu\Software\Microsoft\Internet Explorer\Desktop\General" /v Wallpaper /f
REG ADD "hkcu\control panel\desktop" /v WallpaperStyle /t REG_SZ /d 2 /f
EXIT /b
:MakeNightWallpaper
REG ADD "hkcu\control panel\desktop" /v wallpaper /t REG_SZ /d "" /f
REG ADD "hkcu\control panel\desktop" /v wallpaper /t REG_SZ /d "C:\Users\UserName\AppData\Roaming\Microsoft\Windows\Themes\MDCBackground_black.bmp" /f
REG DELETE "hkcu\Software\Microsoft\Internet Explorer\Desktop\General" /v Wallpaper /f
REG ADD "hkcu\control panel\desktop" /v WallpaperStyle /t REG_SZ /d 2 /f
EXIT /b
RUNDLL32.EXE user32.dll,UpdatePerUserSystemParameters 行是允许立即更改的命令。当我查看 shell 时,我可以看到每次执行脚本时注册表值都会发生变化,但尽管如此,有时背景不会改变,直到用户注销并登录。
【问题讨论】:
-
@Hans Passant。谢谢我看过那篇文章,但它没有为批处理脚本提供任何帮助。他们正在讨论使用我没有任何经验的 C# 或 Powershell 来做这件事。
-
您需要从该链接中删除的是,您不是唯一注意到 UpdatePerUserSystemParameters 不再起作用的人。你不会找到一种神奇的药水让它再次起作用。解决方法很明确,也许您可以在您的组织中找到其他人来帮助您。
标签: windows scripting batch-file registry