使用SPI_SETDESKWALLPAPER函数的程序仅在尝试使用C ++将桌面背景更改为图像时将桌面背景更改为黑色

问题描述 投票:0回答:1

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

我确信我在我的代码中正确输入了文件名“ksa.png”,成为我想要在我的背景上的图像。我使用if条件在错误发生时写出文件的最后一个错误,如果没有错误发生,则使用else条件写出“Success”;但是当我运行程序时,它会将“Success”写入文件。我曾考虑使用.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”。相反,它是纯黑色。感谢您提供帮助,感谢您的帮助。

UPDATE

好的,所以我将代码更新到运行.jpg文件的位置,我仍然得到相同的结果。另外我在log.open("log.txt")函数之前移动了行SystemParametersInfo()命令,就像Remy Lebeau建议的那样,它仍然向文件写出“Success”。我还有同样的问题。这是我更新的代码:

#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;
}
c++ winapi wallpaper
1个回答
0
投票

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

就像Cody Gray♦的判断。

const wchar_t *filenm = L"C:\\Users\\strives\\Desktop\\timg.bmp";
© www.soinside.com 2019 - 2024. All rights reserved.