Неначем проверить, Service заблокированы для разработки, но возможно нужно заменить флажок SPIF_UpdateiniFile на SPIF_SendWinINIChange, чтоб оповестить всех о том, что изменились системные настройки
Или вот ещё вариант из drkb
Код:
uses
ComObj, ShlObj;
procedure ChangeActiveWallpaper;
const
CLSID_ActiveDesktop: TGUID = '{75048700-EF1F-11D0-9888-006097DEACF9}';
var
ActiveDesktop: IActiveDesktop;
begin
ActiveDesktop := CreateComObject(CLSID_ActiveDesktop) as IActiveDesktop;
ActiveDesktop.SetWallpaper('c:\windows\forest.bmp', 0);
ActiveDesktop.ApplyChanges(AD_APPLY_ALL or AD_APPLY_FORCE);
end;