2016-03-07 4 views
0

Я вызываю HtmlHelp из процесса B и передавая HWND другого процесса (процесс A, процесс, который запустил текущий процесс B), чтобы попытаться связать окно справки с моим родительским процессом (A).Можно вызвать API HtmlHelp и передать право собственности другому процессу?

Затем мой процесс (B) выходит, но это все еще вызывает выход из окна справки HTML. Как мне избежать просмотра справки из окна выхода и связать его с временем жизни процесса A?

Согласно MSDN

hwndCaller Определяет дескриптор (HWND) окна вызова HtmlHelp(). Окно справки принадлежит этому окну. Когда окно справки закрыто, HtmlHelp() вернет фокус владельцу, если только владелец не является рабочим столом.

Звонок API просто;

HtmlHelpA(procWindow, "hlp.chm", HH_DISPLAY_TOPIC, help_pointer);

фона:

У меня есть очень старая Fortran программа, которая запускает WinHelp (старый формат HELP), который я мигрирующей в HtmlHelp (более новых API и формат). Я не могу вызвать API Win32 HtmlHelp непосредственно из этого старого кода, потому что он зависает (вызванный размером и местоположением стека, я не могу изменить).

Чтобы обойти это, я обманываю новый процесс из кода Fortran, который имеет размер стека по умолчанию, который может успешно запускать справку.

Прокси-код справки скомпилирован с использованием компилятора SilverFrost C, чтобы он не вводил никаких зависимостей (основное приложение - SilverFrost Fortran).

+0

Have процесс (B). –

ответ

0

Окно справки отображается модулем hhctrl.ocx, который загружается в процесс, вызывающий функцию HtmlHelp, экспортируемый hhctrl.ocx. Это означает, что окно справки не может пережить процесс, который называется HtmlHelp. Поскольку, когда этот процесс завершается, его окна уничтожаются, его модули разгружаются.

Есть несколько способов для Вас, чтобы справиться с этим:

  1. Не используйте функцию HtmlHelp и вместо того, чтобы использовать процесс просмотра справки hh.exe для размещения файла справки.
  2. Упорядочить процесс A, чтобы позвонить по телефону HtmlHelp.
  3. Выполняйте другой процесс, сделав звонок HtmlHelp, который используется в настоящее время.
  4. Убедитесь, что процесс B переживет A. Процесс ** не выйти **
+0

Спасибо, HH.exe почти выполняет эту работу, просто не хватает возможности поиска по ключевому слову (поэтому мне не нужно обновлять все старые справочные ссылки). Этот инструмент выглядит так, будто он выполнял эту работу, но теперь, похоже, был заражен. http://keyworks.helpmvp.com/home/keyhh. Вариант 2 невозможен из-за существующей кодовой базы Fortran. –

Смежные вопросы