CHM制作详解

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)解析

<!-- Table of Contents.hhc -->

<html>

<body>

<UL>

<LI> <OBJECT type="text/sitemap">

<param name="Name" value="display_name">

<param name="Local" value="a.html">

<param name="ImageNumber" value="11">

</OJBECT>

</UL>

</body>

</html>

<UL>代表父项,代表文件夹。

<LI>代表子项,代表文件。

只要在 <LI>后面加个 <UL>,再添加相应的子项,就可以把<LI>的项变成父项.

我们主要要分析的是 <OBJECT>对象,它里面的<param>对象又才是主要描述了内容。

属性 代表的意思
Name Name value指定了显示在列表框中的名称
Local value指定了该项对象的HTML文档
ImageNumber value指定了该项使用何种图标

 

这里主要讨论 ImageNumber,请看下图:

这些是默认的图标(它可以从c:\Program Files\Common Files\Microsoft Shared\Help\ hxvz.dll中抽取出来),从1开始计数,依次递增,使用哪一个图标,就使用哪一个计数。当然,也可以使用自定义图标,不过一般没有必要。以下是使用自定义图标的编码:
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">

<HTML>

<HEAD>

</HEAD><BODY>

<OBJECT type="text/site properties">

<param name="Window Styles" value="0x800025">

</OBJECT>

</BODY></HTML>

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

上面的是默认的 (可加可不加)。


<OBJECT type="text/site properties">

<param name="ImageList" value="file:\\E:\Firefly\DOC61\kingbase\doc\chm\KingbaseES\iconstip.bmp">

<param name="Image Width" value="16">

<param name="Color Mask" value="0xff">

</OBJECT>
它在放在 <BODY.>最开始处。
<param name=”ImageList”  value=”….”这里要使用:file:
<param name=”Image Width”  value=”…” 这里指定了宽度
<param name=”Color Mask”  value=”0xff”, 如果使用 0xff00ff生成的图标颜色将失真。

如果<OBJECT>中没有 ImageNumber项时,如果HHP文件中的 ImageType == Picture(默认是Picture)时,如果有子目录,就显示,否则显示;如果 ImageType == Folder,如果有子目录,就显示,否则显示

 =============================================

HHC文件其实是一个HTML文件。

 

五.HHK解析

<!—Index.hhk -->

<html>

<body>

<UL>

<LI> <OBJECT type="text/sitemap">

<param name="Name" value="display_Index">

<param name="Local" value="a.html">

</OJBECT>

</UL>

</body>

</html>

与 HHC文件类似,它也是一个HTML文件,内容也类似,这里不再赘述,它只有两项。

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

到这里,CHM已经介绍完了。总结一下,制作流程应该如下:

 

  1. 制作 HHP文件,它指定了 HHC文件和 HHK文件。
  2. 制作 HHC 文件,使用文件夹遍历方式即可遍历所有HTM/HTML文档,并去检索HTM/HTML文档中的 <title>作为标题。
  3. 制作 HHK 文件,如果要使用索引,就可以把 <title>作为索引项,与HHC类似。
  4. 使用 hhc which.hhp 进行编译。
  5. 完成。

 

 编码应该是很简单的事情了。

 

posted @ 2011-12-21 14:58  夜雨無聲  阅读(13187)  评论(0编辑  收藏  举报