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

标签 c++ winapi windows-10

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

  1. How to change the windows 10 wallpaper with C++?
  2. How to change desktop background using VC++
  3. 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 上明确说明时,它仍会打印 1(true) SPI_SETDESKWALLPAPER 位,如果他们有问题,它应该返回 0(false)

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

Note When the SPI_SETDESKWALLPAPER flag is used, SystemParametersInfo returns TRUE unless there is an error (like when the specified file doesn't exist).

最佳答案

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;
}

关于c++ - SystemParametersInfo 将背景设置为纯色而不是实际设置图片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58921544/

相关文章:

xaml - 如何将 View 与ViewModel或ViewModel的多个DataTemplates关联?

c++ - 没有构造函数的实例 --- 匹配参数列表(可能是模板问题)

C++ STL 字符串复制构造函数——总是深拷贝?

c++ - 删除指针数组——我做对了吗?

c++ - 数组的最小值

c++ - 如何使用WINAPI (C++) 执行 sleep 状态S1

c - fputs(text, filePtr) 仅从 SendMessage 返回 LPARAM 的第一个字符,而不是整个字符串

c# - 在透明 WPF 窗口后面模糊

c# - x :Bind in windows 10 Mode One way

java - Windows 机器上的默认 Java