zoukankan      html  css  js  c++  java
  • C#如何生成CHM帮助文件

    转载自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文件全部删掉,运行程序后后生成这些文件。

  • 相关阅读:
    限制泛型可用类型,类型通配符声明,泛型方法
    泛型简介,泛型类及使用
    异常概念和处理机制,try-catch-finally,throw和throws,自定义异常
    随机验证码
    常用类--Date日期类,SimpleDateFormat日期格式类,Calendar日历类,Math数学工具类,Random随机数类
    String、StringBuffer和StringBuilder,定义一个自己的StringBuilder的类
    自动装箱和拆箱,枚举类型
    使用内部类开发一个存放数据的容器
    手推期望、方差
    ML 徒手系列 最大似然估计
  • 原文地址:https://www.cnblogs.com/yuxuan/p/1861294.html
Copyright © 2011-2022 走看看