chm文件是Windows操作系统非常方便的电子帮助文档及电子书籍文档。制作CHM文档的工具也有数种,较为流行的有EasyChm等。
这里对CHM制作进行一次详解,使开发人员能够开发出自己的CHM编译工具。当看完这篇教程之后,您会觉得制作一个类似EasyChm的工具非常简单,而像EasyChm这样的工具其实无需注册码激活,因为它根本没有涉及chm编码解码的工作,它只是使用了微软提供了编码解码工具而已,只不过它提供了便利的途径。
一.CHM编译工具:hhc.exe hha.dll
命令:hhc $path/which.hhp
使用这样简单的命令,就可以轻松地生成一个CHM文档,我们要了解的就是which.hhp是一个怎样的文件,后面会有介绍。
二.CHM反编译工具:hh.exe
命令:hh $target_folder source_chm.chm
命令仍是如此简单,$target_folder即是将chm抽取出的html文件放到的目标文件夹,source_chm.chm就是要被反编译的CHM文档。
三.HHP (P=Project)解析。
; which.hhp
[OPTIONS]
Compatibility=1.1 or later-------------------------兼容版本
Compiled file=..\..\..\linqc.chm-------------------产生的CHM文档位置及文档名
Contents file=Table of Contents.hhc-------------hhc文件,html文件归档,后面介绍。
Display compile progress=Yes--------------------是否显示编译进度
Index file=Index.hhk--------------------------------索引文件,即是CHM文档的索引选项卡
Language=0x804------------------------------------语言
title=Fist_chm----------------------------------------chm文档的标题
Default topic=a.html--------------------------------开始页,即刚打开CHM显示的页面.
ImageType=Folder----------------------------------图标类型,默认为Picture后面会有介绍。
[INFOTYPES]
=============================================================
.hhp文档相当于一个INI文档,描述了编译选项,主要的文档还是hhc和hhk文档,它们描述了要编译的HTML文件和INDEX选项。
四.HHC (C=Content)解析
- 代表父项,代表文件夹。
- 代表子项,代表文件。
只要在
- 后面加个
- ,再添加相应的子项,就可以把
- 的项变成父项.
我们主要要分析的是
属性
值
代表的意思
Name
Name
value指定了显示在列表框中的名称
Local
value指定了该项对象的HTML文档
ImageNumber
value指定了该项使用何种图标
这里主要讨论 ImageNumber,请看下图:
这些是默认的图标(它可以从c:\Program Files\Common Files\Microsoft Shared\Help\ hxvz.dll中抽取出来),从1开始计数,依次递增,使用哪一个图标,就使用哪一个计数。当然,也可以使用自定义图标,不过一般没有必要。以下是使用自定义图标的编码:
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
上面的是默认的 (可加可不加)。
它在放在
最开始处。 如果
=============================================
HHC文件其实是一个HTML文件。
五.HHK解析
与 HHC文件类似,它也是一个HTML文件,内容也类似,这里不再赘述,它只有两项。
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
到这里,CHM已经介绍完了。总结一下,制作流程应该如下:
制作 HHP文件,它指定了 HHC文件和 HHK文件。
制作 HHC 文件,使用文件夹遍历方式即可遍历所有HTM/HTML文档,并去检索HTM/HTML文档中的
作为标题。 制作 HHK 文件,如果要使用索引,就可以把
作为索引项,与HHC类似。 使用 hhc which.hhp 进行编译。
完成。
编码应该是很简单的事情了。
- 的项变成父项.