手把手教你C#生成CHM文件
本篇文章将详细阐述如何通过编写程序将HTML文档转换为CHM格式的技术。为了确保项目的顺利进行,在着手编写代码之前,我们建议研究人员深入研究一下HTML Help Workshop的具体运作机制。
在HTML Help Workshop系统中制作CHM格式的文件需要遵循以下步骤:首先创建项目并将相关资源导入其中;其次按照模板配置相应的属性参数;最后执行打包操作即可生成目标CHM版本的电子帮助文档。具体而言,在打包过程中系统会自动生成包含三个文件的可执行程序包:分别为hhhpxxx、hhhcxx和hhhkkx形式命名这三个关键组件。
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
稍微解释下:
默认显示模式为标准界面
字体设置为宋体,默认字号为9号
内容文件名为test.hhc
索引文件名为test.hhk
是否显示编译进度?回答是(Yes)
是否支持全文检索?回答是(Yes)
(Unicode) 中文(中国大陆)
索引文件(hhk)也可以说是另一个HTML文档;它存储了多个关键词。一旦用户打开了chm文件时,请单击索引[标签]后,在链接http://product.it168.com/list/b/0678_1.shtml处填写相应的信息。
索引文件(hhk)也可以说是另一个HTML文档;它存储了多个关键词。一旦用户打开了chm文件时,请单击索引[标签]后,在链接http://product.it168.com/list/b/0678_1.shtml处填写相应的信息。
内容页项目资源(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)以及.chmx格式的脚本化方法(如chm)等文件;通过完成上述步骤的操作后系统会自动生成相应的.chmx格式脚本化方法。
PS:试着用一些外部JS脚本链接至HTML文档生成.chm格式。在生成.chm格式的过程中,在.chm中自动生成所需资源。这样一来就能轻松制作出丰富的.chm文档。比如我在其中做一个演示文稿中的指针就是一个漂亮的时钟就是一个不错的例子。至于更复杂的CHM开发技巧稍后介绍吧
