2005年3月14日星期一

怎样在exe中内嵌程序的帮助文档

重新编写ezMsg2时,翻出原来用的一个"奇技淫巧":在exe的资源中嵌入HTML文档,然后"帮助"菜单项中调用res://path/to/exe/foo.html在IE里显示出来

1. 编写用户文档
假设有index.htm, manual.htm, minimsg.png, buttons.gif四个文件, htm间有相互连接,

2.编写doc.rc文件

INDEX_HTML 23 "index.htm"
MANUAL_HTML 23 "manual.htm"
minimsgr_png 23 "minimsgr.png"
buttons_gif 23 "buttons.gif"

3.编译得到doc.res文件, 可用brcc32

brcc32 doc.rc

4.将doc.res连接到exe中
比如Delphi中

{$R doc.res}


5.然后在代码中调用

sDocFile := '"res://' + Application.ExeName + '/index_html"';
ShellExecute(Self.Handle, 'Open', //action
'iexplore.exe', //program
PChar(sDocFile),//parameters
nil, //current dir
SW_MAXIMIZE); //window command

注意URL的最后(index_html)就是index.html在rc中的资源标识符

6.但这里有一个问题: index.htm嵌入的图片显示不出来,点击index.htm中到manual.html的连接也无法出来。
这是因为res://foo.exe/后面是根据资源标识符来定位资源的,但这里并没有一个名称为manual.html或者buttons.gif的资源,而同时manual.html也不是一个合法的资源标识符('.'是不允许的)。
解决办法是用UltraEdit编辑doc.res,查找FF FF 17 00,每个后面都是资源标识符,改为对应的文件名即可('_'改为'.')。注意如果入口标识符(INDEX_HTML)如果改掉的话,代码中也要相应修改。



没有评论: