手动挡CHM 编译与反编译

最近真是忙晕了。今天小发一篇日志,关于CHM 的。

什么是CHM

CHM 全称Complied Help Manual,即已编译帮助手册,由微软发布,在Windows 平台下很常见,很多软件的帮助文件就是CHM 文件,也有不少的电子书是用CHM 格式存储的。

CHM 其实就是将一些HTML 文件打包压缩,加入索引、搜索、目录等功能。

反编译CHM

反编译后的CHM 会变成HTML 文件外加嵌入到CHM 的图片、声音等文件,也可能还有用于设定样式的CSS 文件。

先说说为什么要反编译CHM ,有些时候想要单独保存CHM 中的一篇文章,如果直接复制,格式完全消失。对于一些纯文字的东西这无所谓,但是要是这些格式消失的地方有的是代码和表格,那看起来相当不方便;而另外一方面,有的时候想翻译某个外文CHM ,反编译后直接编辑HTML 文件会相当的方便。

市场上有很多反编译CHM 的收费工具,或者说市场上很多关于CHM 的工具都是收费的,其实要反编译CHM 无需任何的工具,一条命令就好。

比如我要将F:\piaoyoushan\sunxun.chm 这个文件反编译到F:\piaoyoushan\下,只要输入:

>hh -decompiled F:\piaoyoushan F:\piaoyoushan\sunxun.chm

其中hh 代表的是系统中的hh.exe 文件,这个文件本身并不发挥什么作用,而是调用hhctrl.ocx,所以要是你机器上CHM 方面出现什么问题,比如看不了之类的,首先检查hhctrl.ocx。

编译CHM

如果说市面上反编译CHM 文件的软件还有不少是免费的话,那编辑CHM 文件的软件你真的很难找到免费的了。

其实微软提供过免费的工具,HTML Help Workshop,Google 一下很容易找到。软件很小巧,完全可以用来完成个性化的chm 制作。这个软件也可以用来对CHM 进行反编译。

下面说两个文件,一个是hhp,一个是hhc,其中hhp是CHM 的工程文件,而hhc是生成的CHM 左边的索引。

假定我的目录结构如下:

  F:\piaoyoushan
  __A.html
  __B.html
  __C.html
  __\Files
  	__a.jpg
  	__b.jpg

其中两个图片文件是插入到A、B、C 这个三个HTML 文件中的。

这里就涉及到刚才说的hhp 和hhc,两个文件,如果你不需要索引,hhc可以不用。

现在说说hhp文件的基本格式。

  [OPTIONS]										# 编译选项
  Compatibility=1.1 or later						# 编译版本
  Compiled file=sunxun.chm						# 生成文件名称
  Contents file=sunxun.hhc						# 使用的目录文件
  Default topic=A.html							# 默认首页
  Display compile progress=No						# 是否显示编译过程
  Language=0x804 中文(中国)						# 语言设置
  Title=一个小测试 by sunxun @ 票友山				# CHM 文件标题

  [FILES]											# 要包含的文件
  A.html
  B.html
  C.html

图片文件不用添加进去,图片中要是含有图片,自然会加进去。

而hhc文件格式如下:

  <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
  <HTML>
  <HEAD>
  <meta name="GENERATOR" content="Microsoft&reg; HTML Help Workshop 4.1">
  <!-- Sitemap 1.0 -->
  </HEAD>
  <BODY>
     <OBJECT type="text/site properties">
       <param name="Window Styles" value="0x800225">
       <param name="comment" value="title:Online Help">
       <param name="comment" value="base:index.htm">
     </OBJECT>
     <UL>
        <LI><OBJECT type="text/sitemap">
              <param name="Name" value="开始页">
              <param name="Local" value="A.html">
              <param name="ImageNumber" value="12">
            </OBJECT>
        <LI><OBJECT type="text/sitemap">
              <param name="Name" value="目录">
              <param name="Local" value="B.html">
              <param name="ImageNumber" value="22">
            </OBJECT>
  		  .......
     </UL>
  </BODY>
  </HTML>

目录层次支持多层嵌套,嵌套的规则就不讲了。自己稍微学习下HTML 语言就能看懂。

双击hhp文件即可打开软件进行编译,而双击hhc文件可以实现预览。

对于hhp文件的设定有个讨巧的方法,点击软件界面上的new,之后跟着向导走即可,稍微有点智商都能一次弄会,我就不多说了,生成hhp文件后自己稍微用文本编辑器自定义一下就好。这个办法在你要加入的文件很多的时候相当方便。

而hhc 文件,在文件多的时候,你可以自己写上一两项,然后双击即可使用软件进行编辑。而如果你是反编译CHM 后编辑,那hhc一般都已经包含在反编译后的目录里面了。比如你要进行翻译,主要更改下name value 即可。

版权说明

无特殊说明均为原创文章,转载请注明。
本文链接地址: http://sunxun.info/2009/09/chm-compile-decompile/

分享家:Addthis中国
2009年9月1日 | 归档于 软件
标签: , , , ,
  1. 2009年9月1日 22:46 | #1

    这个做电子书很方便啊!

  2. 2009年11月22日 01:36 | #2

    hh -decompile

发表评论

XHTML: 您可以使用这些标签: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>
注意: 评论者允许使用'@user空格'的方式将自己的评论通知另外评论者。例如, ABC是本文的评论者之一,则使用'@ABC '(不包括单引号)将会自动将您的评论发送给ABC。请务必注意user必须和评论者名相匹配(大小写一致)。