【问题标题】:Windows batch command to make changes effective immediatelyWindows批处理命令使更改立即生效
【发布时间】: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


【解决方案1】:

可能是在注销/登录完成之前注册表更改不会生效(但我不确定为什么它有时会立即生效)。之后尝试重新启动资源管理器,看看是否有帮助。

taskkill /im explorer.exe /f
explorer.exe

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-25
    • 1970-01-01
    • 2018-06-28
    相关资源
    最近更新 更多