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

'SystemParametersInfo' function returns incorrect value when get the desktop wallpaper

本文关键字:返回 不正确 获取 SystemParametersInfo 函数 桌面壁纸      更新时间:2023-10-16

我正在使用函数SystemParametersInfo来获取桌面壁纸,并且假设在向函数添加操作SPI_GETDESKWALLPAPER时返回一个字符串。

LPWSTR bgPath;
if(!SystemParametersInfo(SPI_GETDESKWALLPAPER, 0, bgPath, SPIF_UPDATEINIFILE)){
qDebug() << *bgPath;
return;
}
qDebug()<< "an error occurred";

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

您没有为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";