从 exe 调试嵌入的缺失帮助主题

Debug an embedded missing help topic from an exe

据我了解,当程序访问 .hlp 文件时,Window 的帮助程序会处理该请求。我拥有的是一个较旧的 exe,它希望通过菜单选项跳转到 .hlp 文件中的特定主题。当然 Windows Help 会吐出一般的 "can't find topic" 错误,但我真正想要的是它是否还告诉我它期望找到什么主题,这样我就可以创建一个包含缺失主题的 .hlp包括。有什么方法可以查看更详细的错误日志或查看请求本身而无需 exe 源?

error window

短篇小说 - 没有你的 *.exe(或反编译)的源代码,也没有旧的 WinHelp 项目文件,我首先想到的是 - 没有机会。

WinHelp (.hlp) 格式早在 1990 年代就已存在,并被 HTML 帮助 1.x (.chm) 取代。大约十年前,Microsoft 强烈建议您离开 WinHelp。但是对于测试应用程序来说,它在我的 Windows10 机器上 运行 就像一个魅力(请原谅德语文本),通过一些繁重的步骤来修复过去的 WinHelp 查看器。请注意,我这里说的不是背景中显示的 *.chm 帮助文件的 HTMLHelp Viewer。

Windows Help (WinHlp32.exe) 是从 Microsoft Windows 3.1 操作系统开始的 Microsoft Windows 版本中包含的帮助程序。但是,Windows 帮助程序没有对许多版本进行重大更新,不再符合 Microsoft 的标准。因此,从 Windows Vista 的发布开始到 Windows 7,Windows 帮助程序将不会作为 Windows 的功能提供。如果您想查看 32 位 .hlp 文件,您必须从 Microsoft 下载中心下载并安装该程序 (WinHlp32.exe)。

我假设您已经安装了这个软件包并且在您的 Windows7 机器上有一个 运行 32 位应用程序及其 运行 WinHelp *.hlp 文件。菜单中只有一个主题似乎对您不利。

这可能是由于应用程序调用了错误的 TopicID 或连接的帮助文件的 TopicId 中的拼写错误。也许程序员没有分配主题。导致您错误的原因太多了。

如果您有一些帮助创作经验,您就会知道编译后的 WinHelp 文件 *.hlp 包含一个映射 helpTopicId = topic。编译 WinHelp 时,您将再次需要此映射和别名文件!

创建一个新的 WinHelp *.hlp 文件是一个困难的方法(对我来说也是 15 年未使用)。您必须使用例如再次反编译和编译编辑的主题。您可能会收到警告 - 因为丢失了 contextId。从我的网站查看旧内容:Converting WinHelp (HLP) to HTMLHelp (CHM) - a freeware tutorial

你可能会幸运地使用 HelpContextId 的反编译器

通常只有一个 App.HelpFile *.hlp 从应用程序链接。要以标准 window 显示特定主题,Visual Basic 6 的调用如下所示: WinHelp(hWnd,App.HelpFile,HELP_CONTEXT,ByVal CLng(TopicID))。因此,只有代码更新才能让您有机会获得新的 TopicId。这必须匹配(新)帮助文件。