C++ 以编程方式更改桌面背景

C++ 以编程方式更改桌面背景,c++,c,background,desktop,C++,C,Background,Desktop,作为一个有趣的项目,我想为我的笔记本电脑的背景重现矩阵雨。我研究了如何使用Matrix rain,并且对如何使用Matrix rain有很多想法,但是我还没有找到任何关于以编程方式更改或设置桌面背景的方法。这是我的问题我如何能以编程方式更改桌面背景?< /强>我最好使用C或C++来做这件事,任何帮助都是非常感谢的!p> 我的一个节目的一些摘录: 在Windows 7中,系统中只有一个墙纸文件。因此,我们将当前壁纸保存在临时文件中,并用图像替换壁纸。稍后,我们将还原原始文件: // Get the

作为一个有趣的项目,我想为我的笔记本电脑的背景重现矩阵雨。我研究了如何使用Matrix rain,并且对如何使用Matrix rain有很多想法,但是我还没有找到任何关于以编程方式更改或设置桌面背景的方法。这是我的问题<强>我如何能以编程方式更改桌面背景?< /强>我最好使用C或C++来做这件事,任何帮助都是非常感谢的!p> 我的一个节目的一些摘录:

在Windows 7中,系统中只有一个墙纸文件。因此,我们将当前壁纸保存在临时文件中,并用图像替换壁纸。稍后,我们将还原原始文件:

// Get the system's wallpaper filename from the registry
GetRegKeyStrHK(HKEY_CURRENT_USER, "Control Panel\\Desktop","WallPaper", szFilename, sizeof(szFilename));

// Now copy that file to a temporary file
CopyFile(szFilename, "C:\\myTmpWallpaper.bmp",FALSE);

// Then tell the system to use a new file (it will copy it to the old filename)
SystemParametersInfo (SPI_SETDESKWALLPAPER, 0, (LPSTR) szMyDesktopImage, 0);
函数
GetRegKeyStrHK()
来自我的库,它从注册表获取值(墙纸文件名)


我在过去看到的是一些诡计。点击谷歌fu,看看你能找到什么。
int GetRegKeyStrHK (HKEY hK, const char *szRoot, const char *szName, char *szValue, int iValueSize)
{
    HKEY hkResult;
    int  iKeyType, bufsize, result;

    if (RegOpenKeyEx(hK, szRoot, 0, KEY_READ, &hkResult)
                != ERROR_SUCCESS) return(FALSE);        // no such key

    bufsize=iValueSize;
    result= RegQueryValueEx(hkResult,szName,0, &iKeyType, (BYTE *)szValue, &bufsize);
    RegCloseKey (hkResult);

    if (result != ERROR_SUCCESS) return(FALSE);         // no such name/value pair or buffer too small
    return (TRUE);
}