本代码是将需要切换的图片路径保存到一个文件中,代码从文件中读取这些图片,并定期切换。
注意:编码方式用多字节字符集,否则会出现无法正确显示桌面背景的情况(也就是屏幕变成黑色了--黑屏),原因可能是再传入路径参数时,需要用宽字节,该问题目前没有处理。
代码:
#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);}}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