您的位置:首页 > 编程语言 > Delphi

Delphi通过调用COM对象实现更改桌面壁纸

2015-11-26 21:37 537 查看
从前我也是用SystemParametersInfo这API来改桌面壁纸的,问题多多,也不知道哪错了,就没深究下去。看了CSDN的帖子后,大彻大悟~~
在XP下,SystemParametersInfo只支持BMP格式的图片,如果用其他格式的话就会黑屏?(我记得当年我就是这情况 现在懒得测试了) 把这API的调用方法扔出来:
SystemParametersInfo(SPI_SETDESKWALLPAPER, 1, pointer(pchar(‘c:\a.bmp’)), 0);
因为这API函数的局限性

uses shlobj, ComObj;

procedure SetWP(wp:string);
var
hObj: IUnknown;
ADesktop: IActiveDesktop;
begin
hObj := CreateComObject(CLSID_ActiveDesktop);
ADesktop := hObj as IActiveDesktop;
ADesktop.SetWallpaper(PWideChar(WideString(wp)), 0);
ADesktop.ApplyChanges(AD_APPLY_ALL or AD_APPLY_FORCE);?
end;

//调用方法
SetWP('C:\1.jpg');

注意:因为调用的是COM对象,那么就需要初始化COM库
如果没有引用类似 dialogs 那种单元的话,就需要手动调用CoInitialize() 然后退出时释放对象

uses ActiveX;

initialization
CoInitialize(nil);

finalization
CoUninitialize;
http://www.lsworks.net/article/29.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: