推荐一款图形界面编辑工具ResEdit
Contents
起因
写 Win32 程序时,图标、菜单、对话框这些东西用代码摆非常痛苦;另一方面,有时只是想换个现成小工具的图标或版本信息,又不可能重新编译它。ResEdit 一件工具同时覆盖这两个方向:既能“画”资源,也能改已编译程序里的资源。
ResEdit 是什么
resEdit 是一个图形界面编辑工具,它不但可以用来编写程序所图形界面(如修改图标、菜单、鼠标。版本信息等),还支持了对exe、dll等执行文件内的资源(图标、菜单、鼠标指针、位图、版本信息)等进行修改、替换。

原理:Win32 的“资源”为什么能这样改
Windows 程序的图标、菜单、对话框布局、字符串表、版本信息,在 PE 文件(exe/dll)里是独立于代码的一个资源段,按“类型 / 名称 / 语言”三级目录存放。程序运行时用资源 ID 通过 LoadIcon、LoadMenu、FindResource 一类 API 按需加载——代码与资源天然分离。
这个分离带来了两个能力,正好对应 ResEdit 的两个用法:
- 正向:可视化编写 .rc。开发时资源用 Resource Script(*.rc)描述,RC 编译器把它编成 .res,再由链接器并进 PE。ResEdit 就是把写 .rc 这步变成拖控件画画;
- 反向:直接改已编译的 exe/dll。因为资源段有独立的目录结构、不需要理解代码,工具可以定位到某个图标/菜单的条目,替换后再写回去,整个过程不碰代码段。
典型使用场景
- 给自己写的程序画对话框、菜单,配合资源头文件(resource.h 里的 ID 宏)在代码里引用;
- 替换绿色小工具的图标、版权版本信息;
- 汉化/定制老软件里的位图、字符串。
踩坑记录与注意事项
- 改带数字签名的 exe 会让签名失效:签名覆盖整个文件的哈希,资源段改一个字节校验就不通过,系统会提示签名无效——这是预期行为,不是改坏了;
- 图标是多尺寸的:一个图标资源内部往往含 16/32/48 等多张位图,只替换其中一张,某些视图(任务栏、资源管理器)还是旧图标;
- 资源有语言子项:字符串表、菜单按语言分目录,改错语言那一份,程序加载的还是原来那条;
- 加过壳的程序读不出资源:壳会把资源目录一并压缩/加密,ResEdit 里看到的是乱码或空,要先脱壳再改;
- 改别人的 exe 前先备份:反向修改是直接重写文件,中途出错没有撤销机会。
Author 软件开发大郭
LastMod 2022-01-29