随笔 - 77  文章 - 0 评论 - 12 阅读 - 68885

使用HTML Help Workshop编译成CHM文件需要如下三个文件,
分别以hhp,hhc,hhk为文件后缀名。
hhp:CHM工程文件,CHM目标文件属性参数在这里配置.
hhc,列表文件,确定目标文件中左侧树形列表中"目录"选项卡下的内容.
hhk,索引文件,确定目标文件中左侧树形列表中"索引"选项卡下的内容.

[hhp文件]
hhp几乎就是一个标准的ini文件.分为三个小节Option,Windows,Files.
典型的配置文件(hhp)结构如下:test.hhp

复制代码
[OPTIONS]
Compatibility=1.1 Or later
Default window=Main
Default font=宋体,9,1
Contents file=test.hhc
Index file=test.hhk
Default topic=Htm\FAQ.htm
Display compile progress=Yes
Title=帮助文档
Full-text search=Yes
Language=0X804 中文(中国)

[WINDOWS]
Main=,"test.hhc","test.hhk",,,,,,,0x20,0xB4,0x104E,[80,60,720,540],0x0,0x0,,,,,0

[FILES]
FAQ.htm
test1.htm
test2.htm
复制代码

稍微解释下:

 Default window=Main:默认的显示模式,这里是主页面

 Default font=宋体,9,1:默认的字体

 Contents file=test.hhc:内容文件

 Index file=test.hhk:索引文件

 Display compile progress=Yes:是否显示编译过程

 Full-text search=Yes:是否全文搜索

 Language=0X804 中文(中国):默认语言

[hhk文件]test.hhk:

复制代码
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<HTML>
<HEAD>
   <meta name="GENERATOR" content="Microsoft@ HTML Help Workshop 4.1">
</HEAD>
<BODY>
<UL>
  <LI><OBJECT type="text/sitemap">
       <param name="Name" value="Blog1">
       <param name="Local" value="Htm\test1.htm">
      </OBJECT>
  <LI><OBJECT type="text/sitemap">
       <param name="Name" value="Blog2">
       <param name="Local" value="Htm\test2.htm">
      </OBJECT>
</UL>
</BODY>
</HTML>
复制代码

[hhc文件] test.hhc:

复制代码
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<HTML>
<HEAD>
<meta name="GENERATOR" content="Microsoft@ HTML Help Workshop 4.1">
<HEAD>
<BODY>
<OBJECT type="text/site properties">
   <param name="Window Styles" value="0x237">
<OBJECT>
<UL>
  <LI><OBJECT type="text/sitemap">
         <param name="Name" value="FAQ">
         <param name="Local" value="Htm\FAQ.html">
      </OBJECT>
  <UL>
     <LI> <OBJECT type="text/sitemap">
            <param name="Name" value="Blog1">
            <param name="Local" value="Htm\test1.html">
            <param name="ImageNumber" value="13">
          </OBJECT>
     <LI><OBJECT type="text/sitemap">
            <param name="Name" value="Blog2">
            <param name="Local" value="Htm\test2.html">
            <param name="ImageNumber" value="13">
          </OBJECT>
   </UL>
</UL>
</BODY>
</HTML>
复制代码

一般<UL></UL>代表一级节点,子节点表示如下:
      <LI> <OBJECT type=\"text/sitemap\">
               <param name=\"Name\" value=\"数据库服务器\">
               <param name=\"Local\" value=\"HTML\\全部对象.htm\">
               <param name=\"ImageNumber\" value=\"13\">
              </OBJECT>

[编译]

复制代码
  public string hhcFile = @"C:\Program Files\HTML Help Workshop\hhc.exe";
   //hhc.exe文件位置,windows自带的,一般是这个路径
  public string _defaultTopic = "";//默认的页面
  private bool Compile()
         {
             string _chmFile = startPath + @"\test.chm";
             //chm文件存储路径
             Process helpCompileProcess = new Process();  
          //创建新的进程,用Process启动HHC.EXE来Compile一个CHM文件
             try
             {
                 //判断文件是否存在并不被占用
                 try
                 {
                     string path = _chmFile;  //chm生成路径
                     if (File.Exists(path))
                     {
                         File.Delete(path);
                     }
                 }
                 catch(Exception e)
                 {
                     throw new Exception("文件被打开!");
                 }
 
                 ProcessStartInfo processStartInfo = new ProcessStartInfo();
                 processStartInfo.WindowStyle = ProcessWindowStyle.Hidden;
                 processStartInfo.FileName = hhcFile; 
                  //调入HHC.EXE文件 
                 processStartInfo.Arguments = "\"" + GetPathToProjectFile() + "\"";//获取空的HHP文件
                 processStartInfo.UseShellExecute = false;
                 helpCompileProcess.StartInfo = processStartInfo;
                 helpCompileProcess.Start();
                 helpCompileProcess.WaitForExit(); 
                //组件无限期地等待关联进程退出
 
                 if (helpCompileProcess.ExitCode == 0)
                 {
                     MessageBox.Show(new Exception().Message);
                     return false;
                 }
             }
             finally
             {
                 helpCompileProcess.Close();
             }
             return true;
         }
复制代码

 

[参考]http://www.cnblogs.com/Dotaer/archive/2012/08/02/2619854.html

posted on   极简  阅读(1685)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示