从资源图像文件设置壁纸

Set wallpaper from resource image file

我想从资源图片设置背景墙纸。我找到并尝试了这段代码,但 FindResource() 找不到任何东西。有人可以帮我吗?

HINSTANCE hInstance = GetModuleHandle(NULL);

std::cout << hInstance << std::endl;

HRSRC hResInfo = FindResource(hInstance, MAKEINTRESOURCE(IDB_PNG1), RT_BITMAP);

std::cout << hResInfo<< std::endl;

HGLOBAL hRes = LoadResource(hInstance, hResInfo);

std::cout << hRes << std::endl;

LPVOID memRes = LockResource(hResInfo);
DWORD sizeRes = SizeofResource(hInstance, hResInfo);

std::cout << memRes<< std::endl;
std::cout << sizeRes<< std::endl;

HANDLE hFile = CreateFile("C:\Users\Asus\Desktop\test.png", GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
DWORD dwWritten = 0;
WriteFile(hFile, memRes, sizeRes, &dwWritten, NULL);
CloseHandle(hFile);

SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, (PVOID) "C:\Users\Asus\Desktop\test.png", SPIF_UPDATEINIFILE);

resource file

#include "resource.h"


IDI_ICON1               ICON                    "chrome.ico"


IDB_PNG1                PNG                     "C:\Users\Asus\Pictures\jano.png"

resource.h

#define IDI_ICON1                       101
#define IDB_PNG1                        102

RCDATA resource存储整数或字符串,数据由LoadResource返回。
用语句:IDR_PNG1 RCDATA {"pngwing.png"},
LoadResource returns pngwing.pngLockResource 检索指向指定 内存中的资源

你的代码有两个错误:

  • 您正在创建类型为 PNGIDB_PNG1 资源,但您要求 FindResource() 查找类型为 BITMAP 的资源.类型需要匹配,因此在对 FindResource() 的调用中将 RT_BITMAP 替换为 TEXT("PNG")。或者,在 .rc 文件中使用 RCDATA 而不是 PNG,然后在对 FindResource().

  • 您将错误的句柄传递给 LockResource()。您正在传递由 FindResource() 返回的 hResInfo,但您需要传递由 LoadResource().

    返回的 hRes