我一直在尝试通过编程的方式在Windows上更改exe文件的图标。我有一个.exe文件和一个.ico文件,我想让.exe文件的图标变成.ico文件。
我看到了这个帖子,但我不确定它是否适用于我的情况。那个用户知道以下信息:“exe在应用程序的.rc文件中使用的图标是IDR_MAINFRAME
(ID 128)”。我不确定IDR_MAINFRAME
具体是什么或者它是否对我的情况有用(此外,我甚至找不到需要哪个#include
)。
我的当前代码如下:
HANDLE exe = BeginUpdateResourceW(exe_path, FALSE);
UpdateResourceW(exe,
RT_GROUP_ICON,
RT_GROUP_ICON, // I think this might be the issue?
MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL),
icon, // a .ico file, in memory, as raw binary data
icon_size);
EndUpdateResource(exe, FALSE);
CloseHandle(exe);
我省略了错误处理代码,但我正在检查所有Windows API调用的返回值,并且它们都成功返回。我还注意到,所涉及的.exe以某种方式进行了更新:它获得了新的“修改日期”值,并且OneDrive(我在该目录中运行)将文件识别为已修改,因为它提示将其上传到云端。然而,即使在重新启动资源管理器后,甚至在明确删除图标缓存时,图标也不会更改。
我认为问题可能是UpdateResourceW
的lpName
参数,但我不确定应该放置什么值。正如我上面所说,先前的帖子使用了MAKEINTRESOURCE(IDR_MAINFRAME)
,但我不确定这是否合适或如何获取IDR_MAINFRAME
。
UpdateResourceW
时需要将资源ID调整为应用程序所假定的值。 - IInspectable