C++定时切换桌面背景

本代码是将需要切换的图片路径保存到一个文件中,代码从文件中读取这些图片,并定期切换。

注意:编码方式用多字节字符集,否则会出现无法正确显示桌面背景的情况(也就是屏幕变成黑色了--黑屏),原因可能是再传入路径参数时,需要用宽字节,该问题目前没有处理。

代码:

#include 
#include 
#include 
#include 
#include 
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

你可能感兴趣的:(C++,c++)