具有SPI_SETDESKWALLPAPER功能的程序仅在尝试使用C++将其更改为图像时将桌面背景更改为黑色

Program with SPI_SETDESKWALLPAPER Function Only Changes the Desktop Background to the Color Black when Trying to Change it to an Image using C++

本文关键字:C++ 图像 黑色 背景 桌面 功能 SETDESKWALLPAPER SPI 程序 具有      更新时间:2023-10-16

我正在尝试将桌面背景/墙纸更改为带有.png文件的其他图像。虽然当我运行程序时,背景变成了纯黑色。

我确定我在代码中正确键入了文件名"ksa.png",成为我想要出现在背景上的图像。当错误发生时,我使用 if 条件写出文件上的最后一个错误,如果没有发生错误,我使用 else 条件写出"成功";但是当我运行该程序时,它会将"成功"写入文件。我曾考虑过改用.jpg文件,认为也许.png文件不起作用。当我尝试使用它时,我会给出更新。

#include <windows.h>
#include <fstream>
int main () {
const wchar_t *filenm = L"ksa.png";
std::ofstream log;
if (SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, (void*)filenm, SPIF_UPDATEINIFILE) == FALSE) {
log.open("log.txt");
log << "Error: " << GetLastError();
log.close();
}
else {
log.open("log.txt");
log << "Success";
log.close();
}
return 0;
}

当我运行这个程序时,桌面背景应该设置为图像"ksa.png"。相反,它是纯黑色的。感谢任何帮助使这项工作,谢谢。

更新

好的,所以我将代码更新到运行.jpg文件的位置,但我仍然得到相同的结果。此外,我按照 Remy Lebeau 的建议将行log.open("log.txt")命令移动到SystemParametersInfo()函数之前,它仍然在文件中写出"成功"。我仍然有同样的问题。 这是我更新的代码:

#include <windows.h>
#include <fstream>
int main () {
const wchar_t *filenm = L"3.jpg";
std::ofstream log;
log.open("log.txt");
if (SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, (void*)filenm, SPIF_UPDATEINIFILE) == FALSE) {
log << "Error: " << GetLastError();
log.close();
}
else {
log.open("log.txt");
log << "Success";
log.close();
}
return 0;
}

嗯,你的图片路径有问题。我试过你的代码。除非使用绝对路径,否则无法在相对路径下获取图片。

就像科迪格雷♦的判断一样.

const wchar_t *filenm = L"C:\Users\strives\Desktop\timg.bmp";