SystemParametersInfo 将背景设置为纯色而不是实际设置图片

Posted

技术标签:

【中文标题】SystemParametersInfo 将背景设置为纯色而不是实际设置图片【英文标题】:SystemParametersInfo sets background to solid color rather than actually setting the picture 【发布时间】:2019-11-18 19:25:17 【问题描述】:

我已经尝试了这些帖子中指定的所有解决方案:

    How to change the windows 10 wallpaper with C++? How to change desktop background using VC++ SystemParametersInfo sets wallpaper completly black (using SPI_SETDESKWALLPAPER)

仍然似乎无法让它工作....这是我的代码:

const wchar_t* path = L"C:\\imagge.png";
bool result = SystemParametersInfoW(SPI_SETDESKWALLPAPER, 0, (void*)path, SPIF_UPDATEINIFILE);
std::cout << result;

另外,如果我指定了一个无效的路径,当它在docs SPI_SETDESKWALLPAPER 位上明确指出如果他们有问题它应该返回 0(false) 时,它仍然会打印 1(true)

我也试过调用打印出GetLastError();,它返回 0....

注意当使用 SPI_SETDESKWALLPAPER 标志时,SystemParametersInfo 除非有错误,否则返回 TRUE(比如当指定的文件 不存在)。

【问题讨论】:

你试过用IDesktopWallpaper代替吗? 我不确定您是否可以在此处使用 png。使用 bmp 文件。 谢谢@IInspectable,界面更简单有效! 要设置纯色,请移除壁纸,而不是将其设置为具有单一颜色的图像。使其匹配 COLOR_DESKTOP。 【参考方案1】:

IInspectable 建议使用IDesktopWallpaper interface

我成功了!

这是我的代码:

int main() 
std::wstring x = L"C:\\Users\\danie\\OneDrive\\Pictures\\pixelArt\\Sample.png";
HRESULT  ad;
CoInitialize(NULL);

IDesktopWallpaper* p;
if(SUCCEEDED(CoCreateInstance(__uuidof(DesktopWallpaper), 0, CLSCTX_LOCAL_SERVER, __uuidof(IDesktopWallpaper), (void**)&p))) 
    ad = p->SetWallpaper(NULL, x.c_str());
    p->Release();


CoUninitialize();
return 0;

【讨论】:

以上是关于SystemParametersInfo 将背景设置为纯色而不是实际设置图片的主要内容,如果未能解决你的问题,请参考以下文章

C# 的 SystemParametersInfo 参数定义

谁能告诉我VB中SystemParametersInfo什么意思,怎么用?

SystemParametersInfo调用失败的问题

从代码设置桌面背景颜色

SystemParametersInfo API学习(128个中文参数解释,215个实际值)

Windows API一日一练 75 SystemParametersInfo函数