想要用c++语言去实现照片设置为桌面背景图,然后可以切换多张照片,需要怎么做呀?
把需要切换的图片路径写入一个txt文件,然后再程序中读取,定时切换即可(或者直接再代码中把需要切换的图片路径保存到数组中)。
通过读取文件的方式,代码如下(该方式下,注意编码方式不要使用UNICODE,否则图片路径中含有中文时会导致切换无效--会黑屏):
#include <Windows.h>
#include <fstream>
#include <iostream>
#include <string>
#include <io.h>
using namespace std;
//必须使用多字符集(使用UNICODE会不起作用--黑屏)
LPSTR UTF8ToGB(const char* str)
{
string result;
WCHAR* strSrc;
LPSTR szRes;
//获得临时变量的大小
int i = MultiByteToWideChar(CP_UTF8, 0, str, -1, NULL, 0);
strSrc = new WCHAR[i + 1];
MultiByteToWideChar(CP_UTF8, 0, str, -1, strSrc, i);
//获得临时变量的大小
i = WideCharToMultiByte(CP_ACP, 0, strSrc, -1, NULL, 0, NULL, NULL);
szRes = new CHAR[i + 1];
WideCharToMultiByte(CP_ACP, 0, strSrc, -1, szRes, i, NULL, NULL);
result = szRes;
delete[]strSrc;
//delete[]szRes;
return szRes;
}
//从文件中读取图片信息,并定期更换桌面背景,文件中的图片必须用绝对路径
int main()
{
char buf[20][100];
int i, n=0;
ifstream ofs;
ofs.open("./background.txt");
if (!ofs.is_open())
{
cout << "文件打开失败" << endl;
return 0;
}
while (!ofs.eof())
{
ofs.getline(buf[n], 100);
//判断文件是否存在
ifstream ii;
ii.open(buf[n]);
if (ii.is_open())
{
n++;
ii.close();
}
}
ofs.close();
while (1)
{
for (i = 0; i < n; i++)
{
LPSTR ff = UTF8ToGB(buf[i]);
cout << ff << endl;
SystemParametersInfo(SPI_SETDESKWALLPAPER, TRUE, (void*)buf[i], SPIF_UPDATEINIFILE);
delete[] ff;
Sleep(5000); //5秒更新一次
}
}
return 0;
}
background.txt内容(根据你的实际情况更改路径):
D:/project/vc/test/Project1/Project1/pic/1.jpeg
D:/project/vc/test/Project1/Project1/pic/2.jpeg
D:/project/vc/test/Project1/Project1/pic/3.jpeg
D:/project/vc/test/Project1/Project1/pic/4.jpeg
SystemParametersInfo函数可以设置
#include <stdio.h>
#include <Windows.h>
int main()
{
// 第二个参数没有提示,填个0,就行了。
//第一次换图最好拿系统自带的桌面来换,网上下载的很可能不行,我耗了几小时,才发现是图的问题.
if(SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, "E:\\我就是壁纸.jpeg", SPIF_SENDCHANGE|SPIF_UPDATEINIFILE))
{
printf("更换成功!\n");
}
else
{
printf("更换失败\n");
}
return 0;
}