windows7 设置png格式图片为桌面壁纸
项目中有一个小需求----自动设置壁纸。按理说,这种小需求理论上都很容易啦,没有必要做笔记了。而在实际开发过程还是遇到了各种问题。当然这是由于windows不同版本之间的兼容性引发的问题。
最开始我通过修改注册表的“Control Panel\Desktop\Wallpaper”值,来实现更换桌面壁纸。jpeg图片格式,在win7与win10下面,都表现完美;png图片格式,在win10下能正常设置为壁纸,但是在win7下面就是不得行。
网上有人说是因为,png图片的信息不完整(通过iview4查看,缺少dpi值)。通过手动补全信息后,问题依然。。。
后面再同事提醒下,找到了下面的代码。测试了一下,在win7下设置png格式图片作为壁纸,没问题!
// 设置桌面壁纸
// szFileDir: 壁纸文件路径
// displayStyle: 壁纸展示方式
int ApplyWallpaper(const char* szFileDir, int displayStyle)
{WCHAR wsz[MAX_PATH]; //定义Unicode字符串MultiByteToWideChar(CP_ACP,0,szFileDir,-1,wsz,MAX_PATH);CoInitialize(NULL);std::wstring x = wsz;DWORD dwStyle = displayStyle;HRESULT hr;IActiveDesktop* pIAD;hr = CoCreateInstance(CLSID_ActiveDesktop, NULL, CLSCTX_INPROC_SERVER,IID_IActiveDesktop, (void**)& pIAD);if (!SUCCEEDED(hr)){int errNum = GetLastError();return errNum;}hr = pIAD->SetWallpaper(x.c_str(), 0);if (!SUCCEEDED(hr)){int errNum = GetLastError();return errNum;}WALLPAPEROPT wpo;wpo.dwSize = sizeof(wpo);wpo.dwStyle = dwStyle;hr = pIAD->SetWallpaperOptions(&wpo, 0);if (!SUCCEEDED(hr)){int errNum = GetLastError();return errNum;}hr = pIAD->ApplyChanges(AD_APPLY_ALL);if (!SUCCEEDED(hr)){int errNum = GetLastError();return errNum;}pIAD->Release();CoUninitialize();return TRUE;
}
这里,还是贴出代码来,希望能帮助到恰好需要的朋友吧。
注意:
1.设置壁纸路径分隔符"\",不要与"/“混用.最好只用”\"。如:C:\Windows\Web\Wallpaper\Windows\img0.jpg
如果混用,将导致设置壁纸不成功(本人在这里折腾很久…)
2.壁纸存放路径,最好与系统自带壁纸路径一致(系统壁纸路径:C:\Windows\Web\Wallpaper\Windows\)