SystemParametersInfo将壁纸设置为黑色(使用SPI_SETDESKWALLPAPER)

aas*_*soo 1 c++ winapi desktop-wallpaper

我尝试更改桌面壁纸.当我像这样使用它时它工作得很好:

SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, "C:\\1.jpg", SPIF_SENDCHANGE);
Run Code Online (Sandbox Code Playgroud)

但是当我像这样使用它时,桌面壁纸设置为完全黑色:

std::string s = "C:\\1.jpg";
SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, &s, SPIF_SENDCHANGE);
Run Code Online (Sandbox Code Playgroud)

我试图通过使用获得更多信息GetLastError(),但返回值只是0.我也尝试使用.png文件,但这不会改变任何东西.

我有什么想法我做错了吗?

Vio*_*ffe 5

试试这个:

SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, (void*)s.c_str(), SPIF_SENDCHANGE);
Run Code Online (Sandbox Code Playgroud)

SystemParametersInfo函数不接受std::string指针作为路径,它接受以null结尾的char数组.这是提供的c_str()方法std::string.

  • @AngelusMortis错误的结论; 而Windows API只与C字符串兼容,而不是C++`<string>`对象 (2认同)
  • @CodyGray:不,你确实需要强制转换,需要删除“const”修饰符。但是,您可以转换为“char*”而不是“void*”。 (2认同)