重新使用通过hh.exe打开的帮助窗口

问题描述 投票:0回答:1

我正在通过shell命令执行hh.exe从Lua中打开.chm帮助文件;用户单击Lua应用程序中的多个“帮助”按钮之一,并转到“帮助”文件中的某个主题,具体取决于所使用的“帮助”按钮的上下文。

local HelpFile = strDir.."\\"..strName.." "..strVersion..".chm"
--strDir ,strName, strVersion all identify the help file to be used
local topicpath = "options" --an example; will differ according to application context
local helpexecutable = "C:\\windows\\hh.exe"
local helpparms = "::/"..string.lower(string.gsub(topicpath..".htm", "")
local bOK, intErrorCode, strErrortext = 
    fhShellExecute(helpexecutable, HelpFile..helpparms)
    -- open the help file at a specified location

此代码可以很好地打开我想要的主题的帮助文件。

注意fhShellExecute是程序主机特定的API,等效于os.execute

参数:

strFileName:字符串:文件的完整路径。记住斜线Lua中的文件必须加倍(例如“ C:\ MyDocuments \ My Program.exe”)。

strParams:字符串:参数。如果strFileName是可执行文件,strParams保存要传递给它的参数。应该为空,或者如果strFileName是文档文件,则不提供。

strDirectory:字符串:指定操作的默认(工作)目录。如果不提供,将使用当前工作目录。

strOperation:字符串:指定要执行的操作。可用动作集取决于特定的文件或文件夹。一般来说,动作从对象的快捷菜单中可用的是可用操作。

iShowCmd:整数:指定在打开应用程序时如何显示。如果未提供,则该值默认为1。定义以下值:

0隐藏窗口并激活另一个窗口

1激活并显示一个窗口。如果窗口最小化或Windows将其最大化,将其还原到原始大小和位置。一个应用程序在显示窗口时应指定此标志第一次。

2激活窗口并将其显示为最小化窗口。

3激活窗口并将其显示为最大化窗口。

4显示窗口的最新大小和位置。主动窗口保持活动状态。

5激活窗口并以其当前大小和位置显示它。

6最小化指定的窗口并激活下一个顶层Z顺序的窗口。

7将窗口显示为最小化窗口。活动窗口保留活性。

8以当前状态显示窗口。活动窗口保留活性。

9激活并显示窗口。如果窗口最小化或Windows将其最大化,将其还原到原始大小和位置。一个恢复最小化窗口时,应用程序应指定此标志。

因为我正在使用hh.exe,所以每当用户单击“帮助”按钮时,都会出现一个新的“帮助”实例,这不是我(或用户)想要的。无法打开“帮助”窗口来阻止应用程序的操作。

适应此处显示的方法How to have only one instance of the CHM file opened?(测试帮助文件是否可重命名-如果不能重命名,则说明它正在使用中)我可以防止打开第二个“帮助”窗口。但是,我看不到任何指示打开的“帮助”窗口导航到新上下文主题的方法。

我只能访问非常有限的Lua库集,因此我需要一个可以通过shell命令执行的解决方案。我的想法是:

  • 在现有帮助窗口中移动位置
  • 要关闭现有的帮助窗口,然后在正确的位置打开一个新的窗口

但是我不知道该怎么做。

windows lua chm
1个回答
0
投票

目前,我尚未在装有Windows10 1903版的计算机上安装LUA开发环境。因此,我将以PowerShell示例为例来描述答案,并提供一些LUA提示。转换应该没有问题。

正如我之前所提到的,KeyHH.exe是增强HTML帮助的程序。它可以作为HH.EXE的补充或完全替代。 KeyHH提供了HH.EXE的所有功能,提供了HTML帮助中一些已知错误的解决方案,并且还提供了其他功能。

但是,请注意,这确实是很久以前(大约12年),也许您需要在这里警告您今天的Windows操作系统。但是我很惊讶它能在我的机器上工作。

旧网站keyworks.net不再可用。作为退休的Microsoft帮助MVP,我们几年前已将内容复制到http://keyworks.helpmvp.com

因此,请尝试一下。我建议先执行以下步骤,然后再将其适应您在LUA中的需求。如我所见,没有经验

  • 下载Keyhh.zip
  • 将KeyHH.exe解压缩到临时文件夹,例如D:/_working
  • 将KeyHH.exe剪切并粘贴到hh.exe也驻留的C:/Windows中(具有管理员权限)
  • 将示例CHM file从我的网站下载到临时文件夹,例如D:/_working。要打开此CHM文件,请右键单击保存的文件,单击“属性”,然后单击“取消阻止”。这仅用于测试用例(请参见下文)。

使用PowerShell执行以下hh.exe命令:

hh.exe D:/_working/CHM-example.chm
hh.exe D:/_working/CHM-example.chm::/Garden/flowers.htm
hh.exe D:/_working/CHM-example.chm::/Garden/tree.htm
hh.exe -mapid 10010 D:/_working/CHM-example.chm 

您知道这会产生四个帮助窗口:

enter image description here

您可以使用KeyHH创建独立的HTML帮助窗口。该窗口保持打开状态,直到用户关闭它。创建此窗口后,就可以像在WinHelp中一样在不创建新窗口的情况下在窗口中打开新主题。您可以从HTML帮助窗口,程序或WinHelp文件使用此功能。

您通过指定破折号(-),后跟标识名和CHM文件的名称来创建唯一的KeyHH窗口。然后,KeyHH将检查是否已打开使用此标识名的HTML帮助窗口。如果是这样,HTML帮助窗口将仅使用新的CHM文件或主题进行更新。如果尚未打开,KeyHH将创建一个新的HTML帮助窗口。

您可以使用所需的任何标识符,只要第一个字符不以井号(#)字符开头。

从上面的示例中,要在flowers.htm文件中打开名为CHM-example.chm的主题,您可以使用以下命令:

KeyHH.exe -MyID D:/_working/CHM-example.chm::/Garden/flowers.htm

假设您然后想打开另一个名为tree.htm的主题,然后使用此命令:

KeyHH.exe -MyID D:/_working/CHM-example.chm::/Garden/tree.htm

或mapid的另一个主题

KeyHH.exe -MyID -#mapid 10010 D:/_working/CHM-example.chm   

所有这些命令仅导致一个帮助窗口:

enter image description here

[请注意,有警告使用KeyHH时,请勿在文件名中使用连字符(例如,new-topic.htm)。。您可能需要重命名文件。

我认为您只需要调整几行代码:

local KeyHHParam = " -MyID "
local HelpFile = strDir.."\\"..strName.." "..strVersion..".chm"
local topicpath = "options" 
local helpexecutable = "C:\\windows\\KeyHH.exe"
local helpparms = "::/"..string.lower(string.gsub(topicpath..".htm", "")
local bOK, intErrorCode, strErrortext = 
    fhShellExecute(helpexecutable, KeyHHParam..HelpFile..helpparms)
© www.soinside.com 2019 - 2024. All rights reserved.