Microsoft HTML帮助 - 从主题ID获取主题页面URL

时间:2015-08-12 15:20:03

标签: c# c++ .net chm html-help

我们目前正在使用HTML帮助在我们的软件中显示CHM帮助文件。我们想改变我们打开帮助的方式,在我们自己的嵌入式浏览器自定义窗口中打开它。

通过直接请求使用URL打开主题页面来实现这一点非常简单,但是,我们希望保持主题ID的使用,以便编辑团队可以自由地重新构建和重新命名帮助,因为他们只有通过操纵地图和别名才能看到合适。

我一直在挖掘一下,找不到任何(相当便宜)的方法来从主题ID中打开URL,这样我就可以请求在自定义窗口中打开URL。我错过了一个技巧,或者是否有任何可能有助于此的库?

1 个答案:

答案 0 :(得分:2)

AFAIK您需要一个带有主题文件名的有效网址,例如使用网络浏览器控件时“Garden / garden.htm”。因此,其他解决方案非常困难,我认为使用Web浏览器控件是不可能的。

你知道你可以用例如硬编码的电话进行以下代码:

    public static string GetChmUrl(string fileName, string page)
{
  StringBuilder url = new StringBuilder();
  url.AppendFormat("mk:@MSITStore:{0}::", fileName);
  if (page.IndexOf('/') != 0) url.Append('/');
  url.Append(page);
  return url.ToString();
}

   webBrowser1.Navigate(new Uri(GetChmUrl(Application.StartupPath + sHTMLHelpFileName_ShowWithoutAutoSync, "Garden/garden.htm")));

为了在没有完整的帮助窗口的情况下通过TopicId显示HTMLHelp主题,您可以为HTMLHelp Viewer窗口创建一个特殊的窗口类型。好的 - 这更像是一个帮助创作工作,准备从您的应用程序调用。可以通过特殊方式编译CHM并将其缩小到HTMLHelp Viewer右侧的内容窗格。

您可以通过TopicId调用内容,结果显示在快照中:

    private void btnTopicId_Click(object sender, EventArgs e)
{
    Help.ShowHelp(this.btnOpenHelpShowTopic, helpProvider1.HelpNamespace, HelpNavigator.TopicId, @"10000");
}

enter image description here

许多年前,应用程序中有一个所谓的“嵌入式帮助”,如快照中所示。这是通过HTMLHelp API调用完成的。我有旧的Delphi代码但没有翻译成.net。 HTMLHelp已经使用了近20年,现在有更多的Web帮助使用。所以你必须考虑并决定。

enter image description here

您需要使用编组来从Visual C#应用程序调用非托管HTML帮助API。在.net中使用HTMLHelp API并不容易。要试一试,您可以从下载示例开始(在文章的最后): https://support.microsoft.com/en-us/kb/317406

我也附了快照:

enter image description here

HTH。