如何修改桌面壁纸,200分不够可再加,高手进(200)

  • 主题发起人 主题发起人 pub66cn
  • 开始时间 开始时间
P

pub66cn

Unregistered / Unconfirmed
GUEST, unregistred user!
我想在桌面背景里输出文字或图片,以前的做法是取得当前桌面壁纸加以修改后,保存为文件再更换上去。无意中发现,选择了一个桌面壁纸后,再把该壁纸图片删除,回到桌面里刷新一下依然是显示原来的背景画面,而不是一片蓝色。直到重启或再次在属性里更改一下才会有变化。请问window是不是把壁纸保存在内存里面的?我要修改这个画面,如何实现?
 
修改后需要通知系统壁纸已变,此问题搜索下已有无数答案
 
unit wallpaper;interfaceuses Windows,Messages,SysUtils,Classes,Graphics,Controls,Forms, Dialogs,Math,StrUtils,ShlObj,ComObj,RegWrap,RTLTide,WinWrap, bit;procedure SetWallpaper(fn:string);//仅bmpprocedure SetActiveWallpaper(fn:string;dwStyle:Integer);implementationprocedure SetWallpaper(fn:string);begin SystemParametersInfo(SPI_SETDESKWALLPAPER,0,PChar(fn),SPIF_UPDATEINIFILE);end;procedure SetActiveWallpaper(fn:string;dwStyle:Integer);//JPG等格式需要启用ActiveDesktop// WPSTYLE_CENTER居中 WPSTYLE_TILE;平铺 WPSTYLE_STRETCH拉伸var t:TShellFlagState; ADesk:IActiveDesktop; Pwpo:TWallpaperOpt; Wallpaper:WideString;begin ADesk:=CreateComObject(CLSID_ActiveDesktop)as IActiveDesktop; try t:=ShellSet(SSF_DESKTOPHTML); if GetBit(t,7)=1 then begin Pwpo.dwStyle:=dwStyle; Pwpo.dwSize:=sizeOf(Pwpo); ADesk.SetWallpaperOptions(Pwpo,0); Wallpaper:=WideString(fn); ADesk.SetWallpaper(PWideChar(Wallpaper),0); ADesk.ApplyChanges(AD_APPLY_ALL); end; finally ADesk:=nil end;end;end.
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
886
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部