使用SystemParametersInfo函数设置桌面墙纸时出现问题

时间:2011-02-01 21:07:31

标签: c++ visual-studio-2010

我正在学习C ++,我正在尝试编写一个小程序来更改桌面壁纸。使用文档here,我编写了这个程序:

#include <windows.h>
#include <stdio.h>
#pragma comment(lib, "user32.lib")

void main(){

    BOOL success = SystemParametersInfo(
    SPI_SETDESKWALLPAPER,   //iuAction
    0,                      //uiParam
    "C:\\test.jpg",         //pvParam
    SPIF_SENDCHANGE         //fWinIni
    );
    if (success){
        printf("Success!\n");
    }else
        printf("Failure =(\n");
}

当我尝试为pvParam指定文件路径时,程序总是失败。如果我将pvParam设置为“”,它将正确清除壁纸。我做错了什么?

由于 -Abhorsen

2 个答案:

答案 0 :(得分:4)

除了Dennis关于JPEG文件的评论之外,无论您是否使用UNICODE进行编译,这一点也很重要。如果这样做,则必须将文件指定为L“C:\ test.jpg”。注意字符串前面的L,这使它成为一个宽字符串。或者使用SystemParametersInfoA(),注意A(但它是古老的)。

答案 1 :(得分:0)

根据操作系统版本,pvParam可能无效。

如果您使用的是Windows XP和JPEG文件,并尝试将其指定为壁纸,请注意文档中的注释:

  

Windows Server 2003和Windows   XP / 2000:pvParam参数不能   指定一个.jpg文件。