Повторное использование окна справки, открытого через hh.exe - PullRequest
1 голос
/ 06 ноября 2019

Я открываю файл справки .chm из Lua, выполняя hh.exe с помощью команды оболочки ;пользователь нажимает одну из цифровых кнопок справки в приложении 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 : string: полный путь к файлу. Помните, что косые черты в Lua должны быть удвоены (например, «C: \ MyDocuments \ My Program.exe»).

strParams : строка: параметры. Если strFileName является исполняемым файлом, strParams содержит параметры, которые должны быть переданы ему. Должен быть пустым или не указываться, если strFileName является файлом документа.

strDirectory : string: указывает каталог по умолчанию (рабочий) для действия. Если не указан, используется текущий рабочий каталог.

strOperation : string: указывает действие, которое необходимо выполнить. Набор доступных действий зависит от конкретного файла или папки. Обычно действия, доступные в контекстном меню объекта, являются доступными действиями.

iShowCmd : integer: указывает, как приложение должно отображаться при его открытии. Если не указан, по умолчанию используется значение 1. Определены следующие значения:

0 Скрывает окно и активирует другое окно.

1 Активирует и отображает окно. Если окно свернуто или развернуто, Windows восстанавливает его первоначальный размер и положение. Приложение должно указывать этот флаг при первом отображении окна.

2 Активирует окно и отображает его как свернутое окно.

3 Активирует окно и отображает его как развернутое окно.

4 Отображение окна в его самом последнем размере и положении. Активное окно остается активным.

5 Активирует окно и отображает его в его текущем размере и положении.

6 Минимизирует указанное окно и активирует следующее окно верхнего уровня в Z-порядке.

7 Отображение окна в виде свернутого окна. Активное окно остается активным.

8 Отображение окна в его текущем состоянии. Активное окно остается активным.

9 Активирует и отображает окно. Если окно свернуто или развернуто, Windows восстанавливает его первоначальный размер и положение. Приложение должно указывать этот флаг при восстановлении свернутого окна.

Поскольку я использую hh.exe, каждый раз, когда пользователь нажимает кнопку «Справка», появляется новый экземпляр справки, а не я (или пользователь) хочет. Недопустимо открывать окно справки для блокировки работы приложения.

Адаптация подхода, показанного здесь Как открыть только один экземпляр файла CHM? (проверить, еслифайл справки можно переименовать - если нет, то он используется) Я могу предотвратить открытие второго окна справки. Однако я не вижу способа указать открытое окно справки, чтобы перейти к теме для нового контекста.

У меня есть доступ к очень ограниченному набору библиотек Lua, поэтому мне нужно решениеЯ могу выполнить с помощью команды оболочки. Я думаю:

  • Чтобы переместить позицию в существующем окне справки
  • Чтобы закрыть существующее окно справки и открыть новое в правильной позиции

но я не могу понять, как это сделать.

1 Ответ

1 голос
/ 06 ноября 2019

На данном этапе я не установил среду разработки LUA на мою машину с Windows10 версии 1903. Поэтому я описываю ответ на примере PowerShell с некоторыми подсказками для LUA. Преобразование не должно быть проблемой.

Как я помнил и упоминал ранее KeyHH.exe - это программа, которая дополняет HTML-справку. Его можно использовать в дополнение или в качестве полной замены для HH.EXE. KeyHH предоставляет все функциональные возможности HH.EXE, предлагает решения для некоторых известных ошибок в справке HTML, а также предоставляет дополнительные функциональные возможности.

Но, обратите внимание, это действительно было очень давно (около 12 лет)) и, возможно, вы должны быть предупреждены о текущей операционной системе Windows. Но я был удивлен, что он работает на моей машине.

Старый сайт keyworks.net больше не доступен. Мы, пенсионеры Microsoft Help MVP, уже несколько лет назад скопировали содержимое в http://keyworks.helpmvp.com.

Так что, тем не менее, попробуйте. Я бы порекомендовал сначала выполнить приведенные ниже шаги, а затем адаптировать его для своих нужд в LUA. Как я могу видеть без опыта

  • Скачать Keyhh.zip
  • Разархивировать KeyHH.exe во временную папку, например D:/_working
  • Cutи вставьте KeyHH.exe в C:/Windows, где также находится hh.exe (с правами администратора)
  • Загрузите образец CHM-файла со своего сайта во временную папку, например D:/_working. Чтобы открыть этот файл CHM, щелкните правой кнопкой мыши сохраненный файл, выберите «Свойства», а затем нажмите «Разблокировать». Это только для контрольного примера (см. Ниже).

Выполните следующие команды hh.exe с помощью PowerShell:

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.

Вы создаете уникальное окно KeyHH, указывая тире (-), за которым следует идентификационное имя и имя файла CHM. ,Затем KeyHH проверит, открыто ли окно справки HTML, в котором используется это идентифицирующее имя. Если это так, окно справки HTML будет просто обновлено новым файлом или темой CHM. Если он не открыт, KeyHH создаст новое окно справки HTML.

Вы можете использовать любой идентификатор, который хотите, если первый символ не начинается с символа фунта (#).

Из приведенного выше примера, чтобы открыть тему под названием flowers.htm в файле CHM-example.chm, вы должны использовать эту команду:

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

Предположим, что вы хотите открыть другую тему под названием tree.htm youзатем будет использовать эту команду:

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

Обратите внимание, что было предупреждение Не используйте имена файлов с дефисами (например, new-topic.htm) при работе с KeyHH. . Возможно, вам придется переименовать ваши файлы.

Я думаю, вам нужно всего лишь изменить несколько строк кода:

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)
...