转载自IT168 [ http://www.it168.com/ ]
原文链接:http://tech.it168.com/a2010/0929/1109/000001109735.shtml
【IT168 评论】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文件后,单击索引标签并输入
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
=
P
rocessWindowStyle.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
;
附件是项目,.Net4.0的,有兴趣的可以在其他版本上也实现下,只要将文件拷过去即可。
如果是vs2010,直接运行项目即可,在运行项目之前可以先把CreateChm\bin\Debug目录下的hhp、hhc、hhk、chm文件全部删掉,运行程序后后生成这些文件。