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() 函数失败。
已经尝试过以下方法:
由于我来自 MFC 背景,我试图在 C# 中找到与 GetLastError() 相关的函数。因此,建议使用 getlastwin32error() 但不提供失败条件下的最后一个错误
参数或 return 类型的 Help.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));
}
}
我是 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() 函数失败。
已经尝试过以下方法:
由于我来自 MFC 背景,我试图在 C# 中找到与 GetLastError() 相关的函数。因此,建议使用 getlastwin32error() 但不提供失败条件下的最后一个错误
参数或 return 类型的 Help.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));
}
}