scripting - Windows batch script til at skifte desktop baggrund

Indlæg af Hanne Mølgaard Plasc

Problem



Er der en måde at kontrollere, hvad en bruger i øjeblikket har som baggrund og derefter ændre det afhængigt af hvad det er? For eksempel: Jeg vil have en hvid baggrund i løbet af dagen og en sort baggrund for natten. Kører scriptet vil kontrollere den aktuelle baggrund, hvis den er hvid, vil den skifte til den sorte baggrund, og hvis den er sort, skifter den til den hvide.


Jeg er lidt ukendt med Windows-batch script, og jeg søger nogle tips og råd om, hvordan jeg kan udføre opgaven ovenfor. Her er hvad jeg har kunnet finde hidtil:


@echo off
call :quiet>nul 2>&1
goto :EOF

:quiet


:: Configure Wallpaper 
REG ADD "HKCUControl PanelDesktop" /V Wallpaper /T REG\_SZ /F /D "\%SystemRoot\%energybliss.bmp"
REG ADD "HKCUControl PanelDesktop" /V WallpaperStyle /T REG\_SZ /F /D 0
REG ADD "HKCUControl PanelDesktop" /V TileWallpaper /T REG\_SZ /F /D 2


:: Configure the screen saver.
:: REG ADD "HKCUControl PanelDesktop" /V SCRNSAVE.EXE /T REG\_SZ /F /D "\%SystemRoot\%System32scrnsave.scr"
:: REG ADD "HKCUControl PanelDesktop" /V ScreenSaveActive /T REG\_SZ /F /D 1


:: Set the time out to 900 seconds (15 minutes).
:: REG ADD "HKCUControl PanelDesktop" /V ScreenSaveTimeOut /T REG\_SZ /F /D 900


:: Set the On resume, password protect box 
:: REG ADD "HKCUControl PanelDesktop" /V ScreenSaverIsSecure /T REG\_SZ /F /D 1


:: Remove the user's ability to see the Screen Saver, background, and appearance tabs of Display Properties. 
::REG ADD "HKCUSoftwareMicrosoftWindowsCurrentVersionPoliciesSystem" /V NoDispScrSavPage /T REG\_DWORD /F /D 1
::REG ADD "HKCUSoftwareMicrosoftWindowsCurrentVersionPoliciesSystem" /V NoDispBackgroundPage /T REG\_DWORD /F /D 1
::REG ADD "HKCUSoftwareMicrosoftWindowsCurrentVersionPoliciesSystem" /V NoDispAppearancePage /T REG\_DWORD /F /D 1

:: Make the changes effective immediately
\%SystemRoot\%System32RUNDLL32.EXE user32.dll, UpdatePerUserSystemParameters

Bedste reference


Du kan bruge kode sådan:


@echo off

:: '>nul 2>&1' was moved to other place
call :quiet
exit /b

:quiet
    :: Put there wallpaper name (with extension, bigger that 8 symbols)
    set "Wallpaper.Night.BadWrited=Wallpaper1.bmp"

    :: It is a dirty hack and example of bad code
    for /F "tokens=*" \%\%a in ('reg query "HKCUControl PanelDesktop" /v Wallpaper') do     set "Wallpaper.Current.BadWrited=\%\%a"

    :: Take last 8 symbols of wallpaper name. Change number of symbols to your own  minimal
    set "Wallpaper.Current.BadWrited=\%Wallpaper.Current.BadWrited:~-8\%"
    set "Wallpaper.Night.BadWrited=\%Wallpaper.Night.BadWrited:~-8\%"

    if "\%Wallpaper.Current.BadWrited\%"=="\%Wallpaper.Night.BadWrited\%" (
        call :MakeDayWallpaper>nul 2>&1
    ) else (
        call :MakeNightWallpaper>nul 2>&1
    )
exit /b

:MakeDayWallpaper
    echo Day wallpaper setted
    :: Put your code here
exit /b

:MakeNightWallpaper
    echo Night wallpaper setted 
    :: Put your code here
exit /b


Men jeg anbefaler at bruge systemplanlæggeren. Du kan få adgang til det fra kontrolpanelet, 'Planlagte opgaver' eller noget. Du kan lave 2 filer med navnet 'makeday.bat' og 'maakight.bat'. Scheduler vil køre dem hver dag på det nødvendige tidspunkt