' SystemParametersInfo'获取桌面墙纸时,函数返回不正确的值

时间:2017-10-07 15:49:11

标签: c++ winapi

我使用函数>>=获取桌面壁纸,并假设在向函数添加动作SystemParametersInfo时返回一个字符串。

SPI_GETDESKWALLPAPER

问题是该函数返回一个数值(例如:50121)而不是字符串 我的代码有什么问题吗?

1 个答案:

答案 0 :(得分:2)

您没有为bgPath分配任何内存以填充SystemParametersInfo()

根据SPI_GETDESKTOPWALLPAPER文档:

  

pvParam参数必须指向缓冲区以接收以null结尾的路径字符串。将uiParam参数设置为pvParam缓冲区的大小(以字符为单位)。返回的字符串不会超过MAX_PATH个字符。

即使您正在分配缓冲区,也要检查SystemParametersInfo()的返回值是否失败而不是成功。你正在取消引用你的字符串指针,所以最好只输出第一个字符,而不是整个字符串。

请改用:

WCHAR bgPath[MAX_PATH];

if (SystemParametersInfo(SPI_GETDESKWALLPAPER, MAX_PATH, bgPath, 0))
{
    qDebug() << bgPath;
    return;
}
qDebug() << "an error occurred";