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文件将显示与这个关键词有关的主题的列表,使大家非常方便地找到相关主题。 典型的文件结构如下:
<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)文件结构如下:
<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实现的。
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;
附件是项目,.Net4.0的,有兴趣的可以在其他版本上也实现下,只要将文件拷过去即可。
如果是vs2010,直接运行项目即可,在运行项目之前可以先把CreateChm\bin\Debug目录下的hhp、hhc、hhk、chm文件全部删掉,运行程序后后生成这些文件。
PS:我尝试将一些引用js文件和图片的html文件,将他们编译为chm文件时,这些js文件和图片能够自动被包含到chm文件中,呵呵,这样就可以创建丰富多彩的chm文件了,如我给的demo中,指针就是一个漂亮的时钟,关于更复杂的CHM编程,稍后带来。
PS:如果觉得的好的话,请点推荐,如果值得收藏的话,请点收藏,3Q
C#创建简易CHM文件Demo
C#生成CHM文件(入门篇)相关推荐
- C#生成CHM文件(应用篇)之代码库编辑器(1)
下面的这个系列是以一个小软件的开发过程为基础,和大家分享下我在开发这个软件时遇到的一些问题和总结. 先更新下软件:代码库编辑器Beta版下载 ,上一版的程序见<C#生成CHM文件(应用篇)> ...
- C#生成CHM文件(应用篇)之代码库编辑器(5)【总结、程序、源代码】
经历了快一个月的开发(因为都是在闲暇时间做的,实际实际可能不到一周),AlexisEditor总算完成了. 这边说明一下为什么有些网友不能新增文章的问题. 原因是路径中有中文字符,我一直用的是英文系统 ...
- C#生成CHM文件(应用篇)之代码库编辑器(3)【附源代码下载】
在这篇文章中,我将介绍AlexisEditor项目下主要Form的实现,即MainForm.EditForm. MainForm MainForm包含的主要变量如下 以frm开头的都是对应的窗体变量, ...
- C#生成CHM文件(中级篇)
在上篇<C#生成CHM文件(入门篇)>中,我们利用微软自带的hhc.exe以编程的方式创建一个CHM文件,而且调用的是一个静态的HMTL文件. 在中篇中,实现以下几个目标 1.将在线 ...
- C#生成CHM文件(汇总篇)
本文是前面的C#生成CHM文件系列文章的汇总以及一些其他的关于CHM的资料链接等. C#生成CHM文件(入门篇) http://www.cnblogs.com/alexis/archive/2010/ ...
- C# 生成CHM文件 资料汇总
本文是前面的C#生成CHM文件系列文章的汇总以及一些其他的关于CHM的资料链接等. C#生成CHM文件(入门篇) http://www.cnblogs.com/alexis/archive/2010/ ...
- C#生成CHM文件(应用篇)
在入门篇中我们了解到如何使用C#调用hhc.exe来生成CHM文件,而在中篇中,我们进行了CHM反编译和将CHM文件转化为Word.在下篇中,我将简单介绍下这些技术在如何应用在实际项目中. CHM电子 ...
- C#生成CHM文件(外篇使用hha.dll)
在<C#生成CHM文件>一系列中,我们是以微软自带的hhc.exe来编译CHM文件的,这样有一个弊端就是当我们的机器里面并没有装hhc.exe就会报错,这通常在盗版的Windows系统比较 ...
- 使用Teleport Ultra批量克隆网站,使用Easy CHM合并生成chm文件
1.要下载的页面 http://www.howsoftworks.net/javaapi/ 2. 下载Teleport Ultra 3.使用Teleport Ultra批量克隆网站 4.下载Easy ...
- C#生成CHM文件(转)
HTML Help Workshop介绍:微软出品的HTML Help WorkShop制作chm文件的最佳工具. 本文,我们将用编程的方法来实现将html文件编译成CHM文件.在开始编程之前,我们有 ...
最新文章
- 【Joomla】本地化汇总
- 请编写fun()函数,函数的功能是删去一维数组中相同的数据在一起出现的数,相同的数只保留一个
- 什么数据库最适合数据分析师
- 微信JS SDK Demo
- 综合-某假期欢乐赛 (Apri, 2018)
- 10分钟学会js处理json常用方法
- linux 进程地址空间的一步步探究
- selenium.common.exceptions.WebDriverException: Message: ‘chromedriver‘ executable needs to bein PATH
- No identifier specified for entity没有为实体指定标识符
- django笔记补充
- 11gR2 Grid Infrastructure Installation prerequisites On Windows
- cad填充密度怎么调整_CAD填充比例调好了,填充物数量怎么调,就是密度怎么调?...
- android 半浮层框架
- tk域名管理后台_免费tk域名解析(教你免费顶级域名注册的方法)
- Oracle 如何定义自动增量autocreament的主键ID?
- 5G手机会给我们带来什么样的变化
- [原创]威胁猎人 | 2018年上半年短视频行业黑灰产研究报告
- AM437x——LED裸机
- eclipse 打开txt文件乱码
- VC中调用cmd命令的四种方式
热门文章
- M1支持 Accusonus ERA Bundle for mac(音频降噪消除去混音插件包)
- 专业的现场调音机架软件 - Deskew Technologies Gig Performer 4 Mac
- Android 音视频深入 十九 使用ijkplayer做个视频播放器(附源码下载)
- ng-class使用
- Spring Cloud实战(六)-Spring Cloud Netflix Bus
- Visual Studio 2015 移动跨平台开发初体验
- split和explode有什么区别?
- 「leetcode」1207. 独一无二的出现次数:【数组在哈希法中的经典应用】详解
- indesign使用教程,如何将颜色保存为色板?
- 如何在使用 Spotify 时更好地保护您的隐私?