1

Тема: VBScript: изменение рисунка рабочего стола без перезагрузки компьютера

Решение основано на вызове функции SystemParametersInfo.

'-----------------------------------------------------------------
'Изменение рисунка рабочего стола. Используется формат BMP.
'Обновление картинки должно происходить автоматически, а 
'путь к картинке должен сбрасываться в реестр в раздел 
'HKCU/Control Panel/Desktop, т.е фоновый рисунок сохраняется
'даже после перезагрузки аппарата.
'-----------------------------------------------------------------
'Language: VBScript
'Используется библиотека dynwrap.dll
'ОС Win98 4.10.2222
'ОС WinXP SP2 5.1.2600
'-----------------------------------------------------------------
on Error resume Next    
set dllWrap=CreateObject("DynamicWrapper")
if not IsObject(dllWrap) then
    msgBox "Невозможно создание объекта DynamicWrapper." & vbCRLF & _
        "Установите библиотеку dynwrap.dll"  & vbCRLF & _
        "и зарегистрируйте её в реестре.", _
        vbOKOnly + vbExclamation, "Вызов API"
else
    changeWallPaper("C:\myFile.bmp")
end If
WScript.Quit()

'-----------------------------------------------------------------
function changeWallPaper(bmp)
    const SPI_SETDESKWALLPAPER=20
    const SPIF_UPDATEINIFILE=1
    'Регистрация вызова API
    dllWrap.Register _
        "USER32.DLL", _
        "SystemParametersInfoA", _
        "i=llsl", _
        "f=s", _
        "r=l"
    'Вызов API
    ret=dllWrap.SystemParametersInfoA( _
        SPI_SETDESKWALLPAPER, _    
        0, _
        CStr(bmp), _
        SPIF_UPDATEINIFILE)
    if ret then
        msgBox "Заставка изменена.", _   
            vbOKOnly + vbInformation, _
            "Изменение фонового рисунка"
    else
        msgBox "Не удалось сменить картинку.Произошли ошибки.", _   
            vbOKOnly + vbExclamation, _
            "Изменение фонового рисунка"
    end If
End function

Автор скрипта - Poltergeyst.

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

2

Re: VBScript: изменение рисунка рабочего стола без перезагрузки компьютера

Без использования сторонних средств:

With WScript.CreateObject("WScript.Shell")
    .RegWrite "HKEY_CURRENT_USER\Control Panel\Desktop\Wallpaper", "C:\WINDOWS\Рододендрон.bmp", "REG_SZ"
    .Run "%systemroot%\System32\RUNDLL32.EXE user32.dll, UpdatePerUserSystemParameters", 0, True
End With

Замечания:
* только файлы формата *.bmp;
* работает не на всех системах.

Пример использования