ShowHelp 功能失败通知

ShowHelp function fail notification

我是 C# 的新手,正在为验证帮助文件的主题 ID 内容的实用程序工作。 以下功能对我启动帮助文件很有用:

 Help.ShowHelp(this, HelpFile.Text, HelpNavigator.TopicId, topicIDStr);

如果 Help.ShowHelp() 函数无法使用提供的 CHM 文件和主题 ID 启动 .CHM(帮助文件),那么我需要向用户提供有关启动失败的通知。

以下是伪代码示例:

If Help.ShowHelp() failed
{
    Messagebox("Failed to launch help")
}

我在网上搜索但无法找到函数或 return type/Parameter 来自 ShowHelp() 将通知 showHelp() 函数失败。

已经尝试过以下方法:

感谢阅读。

很难回答,因为我们没有太多关于您如何使用 topicIDStr 的信息。像我的文章 Creating Context-Sensitive Help for Applications 中显示的那样格式化 contextID 数字后,您可以通过代码检查数字范围。

但同样,在开发应用程序和编写帮助文件时,您必须检查所有“topicID”。许多事情取决于如何从您的应用程序调用帮助。

您可能知道,这两个文件(ALIAS 和 MAP)的目的是简化开发人员和帮助作者之间的协调(参见上文 link)。映射文件 link 是映射编号的 ID - 通常这可以由开发人员轻松创建并传递给帮助作者。然后,帮助作者创建了一个别名文件 link 将 ID 添加到主题名称。可以通过 FAR HTML 从外部检查这一点。 FAR HTML 是一个包含各种创作、文件和 HTML 实用程序的工具箱。

请记住 HTMLHelp 大约有 20 年历史,由 Ralph Walden 用 C++ 编写。 .NET(例如 VB 或 C#)帮助 class 是良好的旧 HTML帮助 API 调用的包装器,以及 Microsoft 程序员对托管代码的快速而肮脏的编码。非托管代码是人之道,也是第二个(困难的)解决方案。

因此,当您真的想深入了解时,我会提供一些 link 和信息作为起点。但是你必须自己编写代码来满足你的需求。

How to use the unmanaged HTML Help API from a managed Visual C# application

Connecting HTML Help to C++/MFC Programs (PDF)

HH_GET_LAST_ERROR命令引用了一个丢失的文件Hherror.h,可以在下面的Microsoft KB article.

中找到

HtmlHelp.h 文件有一个 HH_GET_LAST_ERROR 的注释,上面写着 "not implemented",但它似乎至少部分实现了。如果我调用 HtmlHelp(0, PChar(mHelpFile), HH_HELP_CONTEXT, 911);其中 911 是无效的 ContextID,然后 HH_GET_LAST_ERROR returned 错误 0x8004020A 和描述文本 "The compiled help (.chm) file does not contain context IDs." 对于大多数类型的错误 HH_GET_LAST_ERROR 显示为 return 0x80004005 "Unspecified error".

仅供参考,请查看: LoadLibrary on OCX file fails in Windows 7 x64

正如其他人所提到的,您可以检查例如File.Exists 并在下面的代码示例中显示了 Process.Start(...) 调用。

private void button1_Click(object sender, EventArgs e)
{
    string helpFilePath = Application.StartupPath + @"\help-subfolder\C-Sharp-CHM-example.chm";

    // Verify if the file exists
    if (File.Exists(helpFilePath))
    {
        Process.Start(helpFilePath);
    }
    else
    {
        Console.WriteLine(string.Format("File not found [{0}]", helpFilePath));
    }
}