65.9K
CodeProject 正在变化。 阅读更多。
Home

CHMReader.Net

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.71/5 (36投票s)

2004年5月24日

CPOL

4分钟阅读

viewsIcon

326099

downloadIcon

1272

这是我 CHMReader 程序的新 '.NET' 版本,功能更强大。

Sample Image - chmreader007.jpg

引言

在我为“The Code Project”撰写的首篇文章中,我开发了一个程序,使用开源的 CHMLib 在 Pocket PC 2003 上查看 CHM 文件(使用嵌入式 Visual C++)。这个版本存在一些问题,所以我决定编写一个 C# 版本,现在它来了。

Sample screenshot

特点

  • 内容树
  • 索引列表,带有“也参见”跳转。
  • 搜索
  • 使用正则表达式来修补从 CHM 中提取的 HTML 代码。
  • 处理指向其他 CHM 文件的 CHM 文件(CHM 书架。例如:MCSD NetCore.chm)。处理到锚点的导航。
  • 包含完整的 C# 源代码。

Sample screenshot

新代码

新版本的 CHMReader.Net 使用了以下库:

非常感谢这些开发者发布他们的代码,让我们都能从中受益。谢谢。

关于移植 CHMLib,这里有几点需要说明。首先,在移植 LZW 解压缩代码时,我必须先在 'C' 中编译代码,然后让预处理器导出发送给编译器的源代码。这是因为原始代码使用了大量的宏,使得移植某些代码段非常困难。一旦我有了这个源代码,我就可以将其移植到 C#。我必须将所有的缓冲区访问转换为使用 .Net Streams,以及读取缓冲区的代码。这包括创建特殊的类来保存 CHM 文件流内部结构中的数据,并将数据手动从 CHM 文件读取到类的成员变量中(使用 BinaryReader.ReadUInt16 等)。

一旦我得到了一个可以在 C# 中编译的版本,我就必须测试代码是否正常工作。这需要同时在两个 Visual Studio 2003 实例中运行库的两个版本,并从同一个 CHM 文件中提取文件,确保输出结果相同。

完成这些之后,我用移植的库替换了 HTML Help 库使用的基本流处理,然后就得到了一个可以提取文件、提取帮助索引和执行搜索的 CHM Reader,它使用了 HTML Help 库。

Sample screenshot

CHMReader

现在基本功能已经实现,我接着开发 Reader 本身。一旦你有了要显示的页面的文件名(来自索引、内容或搜索),你就可以从 CHM 文件中提取该文件。然后需要扫描这个文件,提取 HTML 页面使用的图片、框架页和样式表,并修补 HTML,使其指向这些文件的新位置。在这种情况下,是一个文件系统中的临时目录。此时,我还会删除不支持的 XML 和 Script 标签。完成这些之后,我就可以保存文件,并使用 OpenNetCF 库的 HTML Viewer 控件来按预期查看页面。

比我描述的要多一些,所以请查看代码。代码尚未优化。这可能取决于时间是否会完成。

如果您无法读取 CHM 文件,请调试代码并提交任何更改。如果您真的无法查看 CHM 文件,请给我发送电子邮件并附上 CHM 文件。

希望您喜欢这个版本。

历史

V2.0.0 初始发布
V2.0.1 - 2004 年 5 月 27 日
  • LZW 解压缩错误修复
  • 为文件添加了图标
  • 添加了命令行参数
  • 文件关联 CHM 文件(首次运行后)
  • 创建了安装程序
V2.0.3 - 2004 年 7 月 12 日
  • 小的 Bug 修复。
  • 新的文件打开对话框,允许浏览完整的文件系统
V2.0.5 - 2004 年 7 月 14 日
  • 更新了 HTML Help Library(原始代码作者:Klaus Weisser – 请参见 //codeproject.org.cn/csharp/HtmlHelp.asp

  • 移植了 CHMLib 0.35 更新到我的 C# 版本(原始 C++ 库 CHMLib,作者:Jed Wing。)

  • 添加了一个选项,允许用户保存 CHB 文件 - CHB 文件是包含加载 CHM 文件时创建的内部数据结构的文件的文件。此选项允许将此数据保存到 CHB 文件。下次加载同一个 CHM 文件时,可以加载此文件,并避免大量处理。此功能得益于 Klaus Weisser。您还可以使用 Klaus Weisser 的 HtmlHelp 查看器来创建 CHB 文件(需要将它们从 <chmfile.chm.bin> 重命名为 <chmfile>.CHB,并将其存储在 Pocket PC 上的 CHM 文件所在的同一目录中)。

  • 细微的用户界面增强。

© . All rights reserved.