怎么样改变win2k、xp下的桌面壁纸,要实时的。
//---------------------------------------------------------------------------
// 设置墙纸
#include <shlobj.h>
void __stdcall SetWallPaper(AnsiString FileName, int WallpaperStyle) {
// WallpaperStyle:
// 1 -> 居中
// 2 -> 平铺
// 3 -> 拉伸
// 其它 -> 自动,使用系统当前设置
IActiveDesktop* pIADesk = NULL;
HRESULT hr = ::CoCreateInstance(Shlobj::CLSID_ActiveDesktop,
NULL,
CLSCTX_INPROC_SERVER,
IID_IActiveDesktop,
(void**)&pIADesk);
if(SUCCEEDED(hr)) {
WALLPAPEROPT WallpaperOpt;
WallpaperOpt.dwSize = sizeof(WALLPAPEROPT);
switch(WallpaperStyle) {
case 1: {
WallpaperOpt.dwStyle = WPSTYLE_CENTER;
break;
}
case 2: {
WallpaperOpt.dwStyle = WPSTYLE_TILE;
break;
}
case 3: {
WallpaperOpt.dwStyle = WPSTYLE_STRETCH;
break;
}
default: {
pIADesk->GetWallpaperOptions(&WallpaperOpt, 0);
break;
}
}
pIADesk->SetWallpaperOptions(&WallpaperOpt, 0);
pIADesk->SetWallpaper(WideString(FileName), 0);
pIADesk->ApplyChanges(AD_APPLY_ALL|AD_APPLY_FORCE);
pIADesk->Release();
}
else {
SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, FileName.c_str(), SPIF_SENDCHANGE);
}
}
结果报错:
[C++ Error] shobjidl.h(2193): E2238 Multiple declaration for 'FOLDERSETTINGS'
[C++ Error] shobjidl.h(8095): E2238 Multiple declaration for 'DESKBANDINFO'
[C++ Error] shlobj.h(1422): E2238 Multiple declaration for 'FVSHOWINFO'
[C++ Error] shlobj.h(3457): E2238 Multiple declaration for 'SHELLFLAGSTATE'
这篇帖子我结的太快了:(
http://www.csdn.net/expert/topic/775/775824.xml?temp=.7685663