重用通过hh.exe

我通过 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 :   字符串:指定操作的默认(工作)目录。如果不   提供,将使用当前工作目录。

     

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

     

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命令执行的解决方案。我的想法是:

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

但是我不知道该怎么做。

lili1030 回答:重用通过hh.exe

目前,我尚未在装有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)
本文链接:https://www.f2er.com/3152831.html

大家都在问