网上铺天盖地的帖子都是说VB中loadresdata(),loadresstring(),……这些个函数的,完全都是说怎样在VB里头读取资源的事,我们都知道VB支持String,Icon,Cursor,BitMap,CUSTOM等几类Win32 标准资源。
使用的时候用VB中的资源编辑器,将标准资源保存到其中,然后就是用前面提到的那几个函数变着戏法的调用,觉得这样很有意思似的。崩溃!
我想解决的问题是如何向一个EXE文件中写入资源,或者把这个EXE文件中之前含有的标准资源替换掉,这个功能有点类似于资源修改工具,例如exeScope、ResHacker等,这个肯定要用到API的,查了一下,相关的API有:
BeginUpdateResource(),UpdateResource(),EndUpdateResource(),很好理解他们的功能,先打开资源文件句柄准备更新资源,更新资源,关闭句柄。
一切似乎都已经解决了!
其实,问题才刚刚开始,那就是不管我怎么调用这几个API,出来都不是我要的结果。
首先,没有找到资料它能更新字符串表格资源,还有icon、Cursor等资源,唯一能正确更新的就是VB中“独有”的CUSTOM资源,问题也就出在这里了!
我先做了个含有一个自定义资源的VB文件,资源为一个文本("我不是个随便的人,我随便起来不是人!")用form的caption来显示!
运行结果
编译生成后的文件取名为target.exe,放到d盘根目录!
下面再来弄个主程序来对它进行资源写入!
写入显示是成功的!可当我迫不及待的打开target.exe的时候,其标题并没有改变!!!晕~
而当我用resHacker打开target.exe的时候……

在reshacker中出现了两个101,怎么可能同一类的资源可以有两个相同的ID??
后来解决了这个问题,就是将原target代码的
LoadResData(101, "CUSTOM"),改成LoadResData("101", "CUSTOM"),就可以正常调用我们写入的资源!
虽然解决了小问题,可是,我怎么才能修改原来的那个ID为101的资源啊!
令我不爽也就是在这里,标识怎么成字符串了呢?(更新了,更新了,我在后来的一篇文章里解决了此问题VB操纵标准资源的一点补充)
使用的时候用VB中的资源编辑器,将标准资源保存到其中,然后就是用前面提到的那几个函数变着戏法的调用,觉得这样很有意思似的。崩溃!
我想解决的问题是如何向一个EXE文件中写入资源,或者把这个EXE文件中之前含有的标准资源替换掉,这个功能有点类似于资源修改工具,例如exeScope、ResHacker等,这个肯定要用到API的,查了一下,相关的API有:
BeginUpdateResource(),UpdateResource(),EndUpdateResource(),很好理解他们的功能,先打开资源文件句柄准备更新资源,更新资源,关闭句柄。
一切似乎都已经解决了!
其实,问题才刚刚开始,那就是不管我怎么调用这几个API,出来都不是我要的结果。
首先,没有找到资料它能更新字符串表格资源,还有icon、Cursor等资源,唯一能正确更新的就是VB中“独有”的CUSTOM资源,问题也就出在这里了!
我先做了个含有一个自定义资源的VB文件,资源为一个文本("我不是个随便的人,我随便起来不是人!")用form的caption来显示!
运行结果
编译生成后的文件取名为target.exe,放到d盘根目录!
下面再来弄个主程序来对它进行资源写入!
写入显示是成功的!可当我迫不及待的打开target.exe的时候,其标题并没有改变!!!晕~
而当我用resHacker打开target.exe的时候……

在reshacker中出现了两个101,怎么可能同一类的资源可以有两个相同的ID??
后来解决了这个问题,就是将原target代码的
LoadResData(101, "CUSTOM"),改成LoadResData("101", "CUSTOM"),就可以正常调用我们写入的资源!
虽然解决了小问题,可是,我怎么才能修改原来的那个ID为101的资源啊!
令我不爽也就是在这里,标识怎么成字符串了呢?(更新了,更新了,我在后来的一篇文章里解决了此问题VB操纵标准资源的一点补充)

04/26/2007 13:40,
光荣路,与“公牛肚”
一个API简单实现从指定URL下载文件

这个API好你不行
根据声明API的参数类型,上面这一句中的参数有问题,101处应该是字符串,所以才会有错误的结果。按照你的写法,程序自动将其转换成了字符串"101"。
http://www.zendstudio.net/post/23/中解决了这个问题,当时也确实弄不明白,API是个奇怪的东西~