是的,这是可能的,尽管不是特别容易。它基本上需要编写一个资源编译器(至少对于您想要修改的资源类型)。
例如,我曾经编写过一个菜单编译器,它在运行时从数据库中取出输入(然后将结果保存回数据库)。如果源表未更改,则使用现有资源,否则将重新构建。
对于菜单资源(我相信是对话框),棘手的一点是某些成员仅根据标志设置以及严格的对齐要求而存在。
在修改 .exe 中已存在的资源的情况下,您需要将资源数据复制到内存缓冲区(如果要添加新元素,则需要额外的空间)(通过使用 FindResource、LockResource、内存副本,然后 UnlockResource)。
进行更改后,您可以使用间接创建函数之一(即 CreateMenuIndirect)并传递缓冲区的地址。
资源 API 允许将此类缓冲区写回应用程序二进制文件,但如果您使用代码签名,这会破坏签名,因此要非常小心。我也不知道该 API 是否适用于实际运行的程序。
| 归档时间: |
|
| 查看次数: |
4784 次 |
| 最近记录: |