HugeCHM: A program to pack html files into CHM without HHA.DLL.

作者:马健
邮箱:stronghorse_mj@hotmail.com
主页:http://www.comicer.com/stronghorse/

FAQ
使用说明
    一、软件安装/删除
    二、软件使用
附录A 鸣谢
附录B 版本更新记录

FAQ

Q:HugeCHM是什么?
A:这是一个CHM制作、拆分、重新打包工具,不仅可以将海量(测试近20万个)HTML文件打包成CHM,而且可以反编译CHM,包括CHM内部控制文件 ,或者将反编译出来的文件(包括内部控制文件)再重新打包成CHM。

Q:现在已经有N多CHM打包工具,为什么还要开发HugeCHM?
A:现在CHM打包工具确实很多,但都有一个共同特点:基于微软的HHA.DLL实现。因此也都有一个天生的缺陷:如果要打包的文件太多,就会出现“内存不足”的错误。例如我要把近20万个文件打成一个CHM,从最简单的HHC试到收费的打包软件,都在相同的地方出现相同的错误。其原因,就在于HHA.DLL功能太复杂了,内部需要生成很多表格,规模一大 当然内存就爆了。但是我认为对于海量HTML来说,这些复杂的功能真的没啥用。
既然基于HHA.DLL的软件在处理海量文件时死路一条,也就只能指望不依赖于HHA.DLL的软件了。以前在写《常见电子书格式及其反编译思路》的时候,我以为开源的hhm既然敢叫HTML Help Maker,应该能够摆脱HHA.DLL的限制,没想到到它的官方网站一看,却看到一行字:This is a program that aims to produce MS' CHM (Compiled HTML Help) files. Currently it can create the archive format, but no internal files.再拜读一下源代码,基本上相当于自己实现了Windows下ITS文件访问接口,但是不能生成CHM文件内部的控制文件,顶多算个半成品。摆出这样的乌龙,我想是因为微软没有公开CHM的内部文件格式,导致Paul Wise写的《Unofficial (Preliminary) HTML Help Specification》里也有很多unknown的地方。
还好我以前写UnEBook的时候,拜读过Christian Ernst Rysgaard的《Htmlhelp Forensics》,知道微软的ITStorage可以对CHM文件(ITS格式)进行操作,这个毕竟是官方提供的接口,比民间版的要靠得住些。只不过在UnEBook里是用来读CHM,这次改成写CHM而已,CHM内部控制文件则在参考Paul Wise写的《Unofficial (Preliminary) HTML Help Specification》基础上,逐文件、逐字节加以校对。

Q:与其他CHM打包软件相比,HugeCHM有什么特点?
A:HugeCHM最大的特色是没有用HHA.DLL,而是直接通过ITStorage接口对CHM文件进行操作,因此能对CHM内部控制文件进行更精准的控制(其实是进行了大刀阔斧的删减),从而:

  1. 能够对海量HTML进行打包。普通CHM打包工具不怕文件大(总长度不超过2 GB应该没事),但怕文件太多,而HugeCHM专门就是为处理海量HTML开发的。
  2. 软件界面简洁,连一般HTML打包软件常见的文件列表都没有。因为在处理海量文件时,文件列表实在是一件既耗时间又耗内存的工作,但是一般打包工具为了生成HHA.DLL所需的HHP文件,不得不花费时间、内存生成文件列表,HugeCHM则不需要。
  3. 生成的CHM文件界面也很简洁,没有目录、索引、搜索、书签等导航项。其实在面对海量HTML文件时,我根本就不相信会有人打算去做这些东西。
  4. 我本人平时比较喜欢看电子书,知道目前国内某些人在做电子书时,总喜欢给电子书加一个封面,点进去才是真正的内容 ,并且总想在某处引导到一个说明页,介绍一下制作者。用普通CHM打包工具实现这些当然不成问题,不过要点技巧;而HugeCHM简化了这种操作,用户直接选择封面页、目录页 、说明页即可,并且在生成的CHM文件工具条中自动加上“封面”、“关于”按钮。当然如果不喜欢,也可以选择不显示工具条。
  5. 对于海量文件,不论是打包还是拆分都将是一个漫长的过程,因此带自动关机选项,便于夜间无人值守下运行。
  6. 与普通CHM打包软件相比,生成的速度要快那么一点点,生成时消耗的内存要少那么一点点,最终生成的CHM文件也要小那么一点点。

Q:HugeCHM在使用上有什么限制?
A:由于种种原因,本软件只发行UNICODE版本,因此不能在Windows 95/98/Me下使用。

Q:“拆分文件重新打包”与“CHM文件打包”有什么区别?此功能有何用处?
A:“CHM文件打包”会自动创建CHM内部的控制文件,因此比较适合对散页HTML打包。
“拆分文件重新打包”不能自动创建CHM内部的控制文件,因此不能直接打包自己制作的散页HTML文件,只能重新打包通过“CHM文件拆分”功能拆分出来的、带内部控制文件的文件夹。
这个功能的用处是:如果下载到的CHM文件内部有点问题,想自己对CHM文件内容进行修正,则可以先用“CHM文件拆分”功能拆分想要修改的CHM文件,注意拆分的时候必须选择“导出CHM内部控制文件”选项,然后对导出后的文件进行修改,改完后用这个功能将所有文件包括原先的内部控制文件一起重新打包成CHM。这样可以避免用原来的CHM制作软件重新制作一遍。
说白了,这个过程有点像修改RAR文件中的内容:先解压,改完后再压回去。

Q:HugeCHM收费吗?
A:HugeCHM是一个“友情软件”(Friendware),用户在承诺不用于商业目的,也不对文件及其附件进行任何更改的条件下,不需要为使用该软件付任何费用,最多是在BBS上看到我发帖子灌水时,进去捧个人场,作为友情回报,或者在年节时发个email问声好(所以叫“友情软件”)。我承诺绝不在程序中暗藏任何商业广告、木马,但不承诺为使用HugeCHM的后果承担任何责任。如果您需要将它用于商业目的,或加入您的网站,请与我联系,否则保留追究一切责任的权利。

Q:为什么有些简体中文CHM文件在繁体Windows下打不开,繁体CHM在简体Windows下打不开?
A:因为在打包的HTML、图像文件等文件中,使用了简体中文或繁体中文作为文件名。具体可以搜索我写的《对E书制作的建议》。

Q:在使用“自动关机”功能时,我怎么知道是正常关机,还是半夜突然掉电?
A:请查看HugeChm.log的内容,正常关机时其内容为关机日期、时间。

使用说明

一、软件安装/删除

本软件安装非常简单:创建一个目录,用WinZip将下载下来的ZIP包解压缩到该目录即可。

本软件的删除也很简单:删除从ZIP包中解压缩出来的所有文件即可。

ZIP包中包括下列文件:

  1. HugeCHM.exe。这是软件的主程序。
  2. HugeCHM.htm。本帮助文件。

如果您下载到的ZIP包中还包括其它文件,毫无疑问不是我放进去的,请删除。

另外程序运行过程中还会生成以下文件:

  1. HugeCHM.ini。这个是参数保存文件,第一次更改参数后生成。退出HugeCHM,删除此文件,再重启HugeCHM,即可恢复缺省参数。
  2. HugeCHM.log。日志文件,如果选择了“自动关机”,关机前会生成此文件,记录关机时间。

二、软件使用

由于种种原因,本软件只发行UNICODE版本,因此不能在Windows 95/98/Me下使用。

1、CHM文件打包

按照软件界面上标注的1、2、3、4的顺序执行:

  1. 选择需要打包的文件所在文件夹。此文件夹及其下所有子文件夹中的所有文件将被打包到CHM文件中。
  2. 选择封面文件、目录文件、说明文件,输入CHM文件标题(将来显示在CHM文件标题条上),并选择是否显示工具条及工具条选项。对这些参数的具体说明见后。
  3. 选择生成的CHM文件所在位置及文件名。
  4. 点“开始打包”按钮即开始打包。打包过程中如果需要中断,点击“停止”按钮即可。打包完成后,如果“自动打开CHM”选项被选中,则自动打开生成的CHM,否则只提示打包完成。 如果“自动关机”选项被选中,则打包完成后自动关机,但如果是通过点“停止”按钮强制中断,则不会自动关机。

如果需要反复制作一个CHM文件,可以在设定好参数后,点“保存”按钮,将参数保存到文件,下次点“调入”按钮,即可调入以前保存的参数。

注意:如果选择了“显示进度”,在开始打包前必须花时间统计需要打包的文件总长度,然后按长度显示打包进度。由于受32位限制,在文件总长度大于4 GB时进度显示会出问题。不过在这种情况下,本来就应该关闭“显示进度”,以免打包前花费太多的时间去统计总长度。

对封面、目录、说明页和工具条的解释:
在制作电子书时,很多人喜欢按照纸书的习惯,制作一个封面,点击后再进入目录或正文。在微软发布的HTML Help Workshop(CHM打包、反编译软件的鼻祖)中,将封面页称为“缺省页(default page)”,而目录页称为“主页(home page)”,并且在CHM浏览器的工具条上提供一个“主页”按钮,点击后直接跳到“主页”。当然,如果觉得没有必要玩这样的花头,也可以将封面和目录合一,指向同一个文件。在HugeCHM里,缺省认为这两个页面是同一个,即选择其中一个后,如果另外一个为空,则自动设置为同一个。
另外有些人为了不使自己的劳动被“埋没”,还喜欢单独制作一个说明页,对书籍、版权、制作者做一个简短的介绍。
如果用户选择的封面、目录不是同一个文件,则打包出来的CHM的工具条上会多出“主页”、“关于”两个按钮,分别对应主页、说明页。工具条上的“主页”指向目录页。

对“窗口位置”的说明:
某些人喜欢设置CHM的初始窗口位置,即打开CHM后窗口定位到固定的位置和大小,这时可以通过此功能进行设置:点击“选择”按钮,弹出选择框,拖动、缩放此窗口,点击“OK”,打包后CHM的初始窗口位置、大小就是所选的位置、大小。
如果选择了窗口位置后,再选择“用户打开CHM后,可以改变初始窗口位置和大小”,则第一次打开CHM时定位到指定的位置,以后再次打开CHM时,定位到上次CHM退出时的位置和大小。否则,每次打开CHM文件都会定位到固定的位置和大小。
如果点击“清空”按钮,将位置值全部清空(缺省情况),则CHM初始窗口位置由CHM浏览器决定,“用户打开CHM后,可以改变初始窗口位置和大小”选项视为选择。

2、CHM文件拆分

执行过程:

  1. 选择“需要拆分的CHM文件”,或需要拆分的CHM文件所在文件夹(批量拆分)。
  2. 如果打算对CHM内部控制文件进行研究, 或想把拆分后的文件再重新打包成CHM,就勾选“导出CHM内部数据文件”,否则不勾选(缺省为不勾选)。
  3. 点击“开始拆分”按钮即可开始拆分。拆分过程中如果需要中断,点击“停止”按钮即可。拆分时自动在CHM文件所在文件夹下创建同名文件夹,存放拆分后的文件。

 3、拆分文件重新打包

执行过程:

  1. 选择需要打包的CHM文件,或需要打包的多个子文件夹所在的文件夹(批量打包)。
  2. 点击“开始打包”按钮即可开始打包。打包过程中如果需要中断,点击“停止”按钮即可。打包后的CHM文件与文件夹同名。

注意:

  1. 此功能不能自动创建CHM内部控制文件,因此如果需要打包的文件夹下没有现成的内部控制文件,打包后的CHM文件不能正常显示。
  2. 如果在拆分CHM后更改了CHM文件内容,然后用此功能重新打包,则需要注意:
    1. 只能更改文件内容,不能更改文件名。
    2. 如果加入了新的文件,除非在其他HTML中有到此文件的链接,否则不能显示此文件。

 4、命令行参数

如果需要将HugeCHM与其它软件联动,可以使用命令行参数。命令行参数非常简单,就是需要自动调入的参数文件的路径,如:

HugeCHM "D:\mm\aaa.hcm"

注意如果路径带空格,需要用半角双引号括起来,否则可以没有。

需要与HugeCHM联动的软件只需按照自己的需要生成hcm文件,作为参数传入HugeCHM,HugeCHM即会按照参数打包,然后退出,整个过程相当于自动点击了“调入”、“开始打包”、“退出”三个按钮。不过如果参数有误,或打包过程有问题,“退出”按钮不会被自动点击。

hcm文件是一个标准的INI文件,ANSI编码。整个文件只有一个[ParaBlock]段,包含下列项:

对应选项
PARA_CHM_SHOW_TOOLBAR 显示工具条 0/1
PARA_CHM_AUTO_OPEN 自动打开CHM,在命令行参数模式下无效 0/1
PARA_CHM_SHOW_PROGRESS 显示进度 0/1
PARA_CHM_POS_LEFT 窗口位置,左 整数
PARA_CHM_POS_TOP 窗口位置,上 整数
PARA_CHM_POS_WIDTH 窗口位置,宽 整数
PARA_CHM_POS_HEIGHT 窗口位置,高 整数
PARA_CHM_POS_SAVE 记忆窗口位置和大小 0/1
PARA_CHM_WND_MAX 初始窗口最大化 0/1
PARA_CHM_TOOLBAR_BTN 工具条选项->工具条按钮 整数
PARA_CHM_TOOLBAR_SHOW_TXT 工具条选项->显示按钮文字 0/1
 
PARA_CHM_SRC_FOLDER 需要打包的文件存放在文件夹 字符串
PARA_CHM_TGT_FILE 合并后的CHM文件 字符串
PARA_CHM_TITLE 标题 字符串
PARA_CHM_HOME_PAGE 封面(缺省页) 字符串
PARA_CHM_INIT_PAGE 目录(主页) 字符串
PARA_CHM_ABOUT_PAGE 关于(说明页) 字符串

其实最简单的办法就是自己在HugeCHM的软件界面里设置好参数,点“保存”,即可得到一个hcm文件模板。通常其它软件需要修改的只是后面几个字符串参数。

附录A 鸣谢

本软件在开发过程中参考了下列资料,在此表示感谢!

  1. Christian Ernst Rysgaard写的《Htmlhelp Forensics》。
  2. Paul Wise写的《Unofficial (Preliminary) HTML Help Specification》。

附录B 版本更新记录

Version 1.11
新增功能:在Win7及以上版本的Windows下运行,打包时能在任务栏上显示当前进度。
错误修正:在Win7任务栏上图标显示比较模糊。
中文界面的字号从宋体9改成10。

Version 1.10
新增功能:“拆分文件重新打包”,用于修复有问题的CHM文件,详见使用说明。
功能增强:“CHM文件拆分”支持批量拆分。
功能调整:在“CHM文件拆分”中去掉“自动关机”选项。

Version 1.05
新增功能:支持命令行参数。详见使用说明。
功能修正:更改英文界面字体。

Version 1.04
新增功能:支持从资源管理器拖拽文件、文件夹。
功能修正:调整英文版界面字体。

Version 1.03
新增功能:“初始窗口最大化”选项,如果选中,打包出来的CHM运行时最大化窗口显示。最大化显示在宽屏上可能会比较难看,所以此选项缺省未选中。
新增功能:运行配置CHM工具条按钮。

Version 1.02
新增功能:“CHM文件打包”页中增加“保存”、“调入”功能,可以将当前参数保存到文件,以后再调入。

Version 1.01
新增功能:“CHM文件打包”页中允许设置“关于”页。在上一版中,工具条上的两个自定义按钮分别是“封面”、“目录”,其中“目录”与标准工具条按钮“主页”重复,因此改成“关于”。关于页通常是一个说明页,对书籍、版权、制作者做一个简短的介绍。
新增功能:“CHM文件打包”页中允许设置CHM窗口的初始位置、大小。

Version 1.00

  1. 海量HTML文件打包成CHM。
  2. 反编译CHM,可选是否包括CHM内部控制文件。
  3. 同步发行简体中文、英文版本。