Windows批处理命令使更改立即生效

时间:2011-09-02 12:47:27

标签: windows scripting batch-file registry

我有一个批处理脚本,可让用户将背景从黑色更改为白色,反之亦然。我遇到的问题是脚本有时只会立即更改,有时用户必须注销并重新登录才能更改背景。以下是我到目前为止的情况:

@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时,我可以看到每次执行脚本时注册表值都在变化,但是尽管如此,有时候背景不会改变,直到用户注销并登录。

1 个答案:

答案 0 :(得分:2)

注册表更改在注销/登录完成后才会生效(我不知道为什么它有时会立即起作用)。之后尝试重新启动资源管理器,看看是否有帮助。

taskkill /im explorer.exe /f
explorer.exe