zoukankan      html  css  js  c++  java
  • 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;
     

    附件是项目,.Net4.0的,有兴趣的可以在其他版本上也实现下,只要将文件拷过去即可。

    如果是vs2010,直接运行项目即可,在运行项目之前可以先把CreateChm\bin\Debug目录下的hhp、hhc、hhk、chm文件全部删掉,运行程序后后生成这些文件。

     PS:我尝试将一些引用js文件和图片的html文件,将他们编译为chm文件时,这些js文件和图片能够自动被包含到chm文件中,呵呵,这样就可以创建丰富多彩的chm文件了,如我给的demo中,指针就是一个漂亮的时钟,关于更复杂的CHM编程,稍后带来。

    PS:如果觉得的好的话,请点推荐,如果值得收藏的话,请点收藏,3Q 

    C#创建简易CHM文件Demo 

     

     
     
     
  • 相关阅读:
    leetcode 296 题解(暴力破解)
    2.7最大公约数(递归解法)
    2.6斐波那契数列(多分支递归)
    2.5翻转字符串(递归4 )
    2.4对arr数组元素求和
    2.3 用递归形式打印i到j
    2.2用递归方式解决阶问题
    2.1什么是递归?
    1.用数组的方式实现列表
    如何在电脑上安装Jupyter Notebook
  • 原文地址:https://www.cnblogs.com/alexis/p/1837909.html
Copyright © 2011-2022 走看看