2011-09-02 82 views
0

我有一個批處理腳本,可讓用戶將其背景從黑色更改爲白色或反之亦然。我遇到的問題是,腳本有時會立即做出更改,而有時用戶必須註銷並重新登錄才能更改背景。以下是我迄今爲止:Windows批處理命令使更改立即生效

@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

首款谷歌命中:http://social.technet.microsoft.com/Forums/en-US/ITCG/thread/c730f15b-d4cc-4879-9498-70b7618822a0 –

+0

@Hans帕桑特。感謝我看過那篇文章,但它沒有提供任何對批處理腳本的幫助。他們正在討論如何使用我沒有任何經驗的C#或Powershell。 –

+0

你需要從這個鏈接拿走什麼,你並不是唯一注意到UpdatePerUserSystemParameters不再起作用的人。你不會找到一種魔法藥水來讓它再次起作用。解決方法很明確,也許你可以找到你組織中的其他人來幫助你。 –

回答

2

這可能是註冊表更改沒有生效,直到註銷/登錄完成(我不知道爲什麼它有時會立即工作)。之後嘗試重新啓動瀏覽器,看看是否有幫助。

taskkill /im explorer.exe /f 
explorer.exe 
+0

即使這沒有工作:( –