Пакетная команда Windows, чтобы изменения вступили в силу немедленно - PullRequest
0 голосов
/ 02 сентября 2011

У меня есть пакетный скрипт, который позволяет пользователям менять свой фон с черного на белый или наоборот.Проблема, с которой я столкнулся, заключается в том, что скрипт иногда вносит немедленные изменения, а в других случаях пользователю приходится выходить из системы и снова входить в нее, чтобы фон изменился.Вот что у меня есть:

@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 - это команда, позволяющая немедленное изменение.Когда я смотрю на оболочку, я вижу, что значение реестра меняется каждый раз, когда выполняется скрипт, но, несмотря на это, иногда фон не меняется, пока пользователь не выйдет из системы и не войдет в нее.

1 Ответ

2 голосов
/ 02 сентября 2011

Возможно, что изменения в реестре не вступят в силу до тех пор, пока не будет завершен выход из системы / вход в систему (хотя я не уверен, почему это иногда срабатывает сразу). Попробуйте перезапустить проводник и посмотрите, поможет ли это.

taskkill /im explorer.exe /f
explorer.exe
...