windows7 设置png格式图片为桌面壁纸

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\)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值