scripting - Windows batch kommando for at gøre ændringer effektive straks

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har et batch script, der lader brugerne ændre deres baggrund fra sort til hvid eller omvendt. Problemet jeg har er, at scriptet kun gør omgående ændringer, og andre gange skal brugeren logge af og logge på igen for baggrunden for at ændre. Her er hvad jeg har hidtil:


@echo off

call :quiet
exit /b

:quiet
    :: For comparison, using the black wallpaper registry value
    set "black=C:UsersUserNameAppDataRoamingMicrosoftWindowsThemesMDCBackground\_black.bmp"

    :: Set reg query result to current
    FOR /F "tokens=2* delims=    " \%\%A IN ('REG QUERY "HKCUControl PanelDesktop" /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 "hkcucontrol paneldesktop" /v wallpaper /t REG\_SZ /d "" /f
    REG ADD "hkcucontrol paneldesktop" /v wallpaper /t REG\_SZ /d "C:UsersUserNameAppDataRoamingMicrosoftWindowsThemesMDCBackground\_white.bmp" /f
    REG DELETE "hkcuSoftwareMicrosoftInternet ExplorerDesktopGeneral" /v Wallpaper /f
    REG ADD "hkcucontrol paneldesktop" /v WallpaperStyle /t REG\_SZ /d 2 /f
EXIT /b


:MakeNightWallpaper
    REG ADD "hkcucontrol paneldesktop" /v wallpaper /t REG\_SZ /d "" /f
    REG ADD "hkcucontrol paneldesktop" /v wallpaper /t REG\_SZ /d "C:UsersUserNameAppDataRoamingMicrosoftWindowsThemesMDCBackground\_black.bmp" /f
    REG DELETE "hkcuSoftwareMicrosoftInternet ExplorerDesktopGeneral" /v Wallpaper /f
    REG ADD "hkcucontrol paneldesktop" /v WallpaperStyle /t REG\_SZ /d 2 /f
EXIT /b


Linjen RUNDLL32.EXE user32.dll,UpdatePerUserSystemParameters er den kommando, der tillader den øjeblikkelige ændring. Når jeg ser på skallen, kan jeg se, at registreringsværdien ændrer sig hver gang scriptet udføres, men på trods af dette ændrer baggrunden ikke, før brugeren logger af og logger på.

Bedste reference


Det kan være, at registreringsdatabasen ikke får virkning, før loggen er logget på (jeg er ikke sikker på, hvorfor det til tider ville fungere med det samme). Prøv at genstarte explorer bagefter og se om det hjælper.


taskkill /im explorer.exe /f
explorer.exe