[转]C#生成CHM文件(入门篇)

HTML Help Workshop介绍:微软出品的HTML Help WorkShop制作chm文件的最佳工具。

本文,我们将用编程的方法来实现将html文件编译成CHM文件。在开始编程之前,我们有必要了解下HTML Help Workshop是怎么生成CHM的。

HTML Help Workshop编译成CHM文件需要如下三个文件,分别以hhp,hhc,hhk为文件后缀名。

hhp:CHM工程文件,CHM目标文件属性 95%的参数都在这里被确定.
hhc,列表文件,确定目标文件中左侧树形列表中"目录"选项卡下的内容.
hhk,索引文件,确定目标文件中左侧树形列表中"索引"选项卡下的内容.
hhp几乎就是一个标准的ini文件.分为三个小节Option,Windows,Files.

典型的配置文件(hhp)结构如下:

[OPTIONS]
Compatibility=1.1 Or later
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 中文(中国)

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

[FILES]
NewTopic.html

 

稍微解释下:

 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)也是一个HTML文件,它包含若干个关键词,当用户打开chm文件后,单击索引标签并输入一个关键词后,chm文件将显示与这个关键词有关的主题的列表,使大家非常方便地找到相关主题。 典型的文件结构如下:
 
代码
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="NewTopic">
 
<param name="Local" value="NewTopic.html">
 
OBJECT>
UL>
BODY>
HTML>

 


内容页项目资源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="NewTopic">
 
OBJECT>
<UL>
 
<LI> <OBJECT type="text/sitemap">
 
<param name="Name" value="NewTopic">
 
<param name="Local" value="NewTopic.html">
 
OBJECT>
UL>
UL>
BODY>
HTML>

 

 
用C#编程实现编译,其实是利用Process类来调用exe实现的。
代码
Process helpCompileProcess = new Process(); //创建新的进程,用Process启动HHC.EXE来Compile一个CHM文件
 try
 {
 
//判断文件是否存在并不被占用
 try
 {
 
string path = _chmFile; //chm生成路径
 if (File.Exists(path))
 {
 File.Delete(path);
 }
 }
 
catch
 {
 
throw new Exception("文件被打开!");
 }

 ProcessStartInfo processStartInfo 
= new ProcessStartInfo();
 processStartInfo.WindowStyle 
= ProcessWindowStyle.Hidden;
 processStartInfo.FileName 
= hhcFile; //调入HHC.EXE文件 
processStartInfo.Arguments = "\"" + Path.GetFullPath(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/alexis/archive/2010/09/29/1837909.html

posted @ 2010-09-29 18:33  星释天狼  阅读(262)  评论(0)    收藏  举报