使用c和windows api以编程方式更改壁纸

前端之家收集整理的这篇文章主要介绍了使用c和windows api以编程方式更改壁纸前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我一直在尝试使用Qt和mingw32编写一个应用程序来下载图像并将它们设置为背景壁纸.我已经在线阅读了几篇关于如何在VB和C#中执行此操作的文章,并且在某种程度上如何在c中执行此操作.我目前正在调用SystemParametersInfo,看起来似乎是所有正确的参数(没有编译器错误),它失败了.没有镲片崩溃,只返了0. GetLastError()返回同样有启发性的0.

下面是我正在使用的代码(稍微修改一下,因此您不必查看对象内部).

#include <windows.h>
#include <iostream>
#include <QString>

void setWall()
{
    QString filepath = "C:\\Documents and Settings\\Owner\\My Documents\\Wallpapers\\wallpaper.png";
    char path[150];
    strcpy(path,currentFilePath.toStdString().c_str());
    char *pathp;
    pathp = path;

    cout << path;

    int result;
    result = SystemParametersInfo(SPI_SETDESKWALLPAPER,pathp,SPIF_UPDATEINIFILE);

    if (result)
    {
        cout << "Wallpaper set";
    }
    else
    {
        cout << "Wallpaper not set";
        cout << "SPI returned" << result;
    }
}

解决方法

可能是SystemParametersInfo期望LPWSTR(指向wchar_t的指针).

试试这个:

LPWSTR test = L"C:\\Documents and Settings\\Owner\\My Documents\\Wallpapers\\wallpaper.png";

result = SystemParametersInfo(SPI_SETDESKWALLPAPER,test,SPIF_UPDATEINIFILE);

如果这样可行(尝试使用几个不同的文件来确保),则需要将char *转换为LPWSTR.我不确定Qt是否提供这些服务,但一个可能有用的功能MultiByteToWideChar.

猜你在找的C&C++相关文章