我希望使用Windows API在C++中更改Windows桌面背景墙纸。

我已经阅读了有关此主题的以下文章:

  • How to change desktop background using VC++
  • SystemParametersInfo sets wallpaper completly black (using SPI_SETDESKWALLPAPER)

  • 问题:

    当我执行代码时,桌面背景会变成全黑,就像上面的帖子一样(是的,我确实尝试了该帖子中建议的修复方法。祝您好运。)

    代码:
    #include <windows.h>
    
    int main() {
        std::string s = "C:\\picture.jpg";
        SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, (PVOID*)s.c_str(), SPIF_SENDCHANGE);
        return 0;
    }
    

    我也只尝试了(void*)而不是上面的(PVOID*)和字符串前面的L。到目前为止没有任何工作。

    已解决:

    SystemParametersInfo更改为SystemParametersInfoA(在评论和答案中建议)可以解决问题。

    最佳答案

    我相信您应该使用wchar_t而不是字符串作为SystemParametersInfo()的输入,还应该使用SystemParametersInfoW()

    以下代码为我工作:

    #include <windows.h>
    #include <iostream>
    
    
    int main() {
        const wchar_t *path = L"C:\\image.png";
        int result;
        result = SystemParametersInfoW(SPI_SETDESKWALLPAPER, 0, (void *)path, SPIF_UPDATEINIFILE);
        std::cout << result;
        return 0;
    }
    

    如果设法更改背景,则结果应返回true。

    07-26 07:33