2016-03-07 25 views
0

我從進程B調用HtmlHelp並傳遞另一個進程(進程A,啓動當前進程B的進程)的HWND,嘗試將幫助窗口與我的父進程(A)綁定。可能調用HtmlHelp API並將所有權傳遞給另一個進程?

然後我的進程(B)退出,但仍然導致HTML幫助窗口退出。 如何避免幫助查看者退出並將其與過程A的生命週期關聯?

根據MSDN

hwndCaller 指定窗口調用HTMLHELP的句柄(HWND)()。幫助窗口歸屬於此窗口。 當幫助窗口關閉時,HtmlHelp()將焦點返回給所有者,除非所有者是桌面。

API調用很簡單;

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

背景:

我有我遷移到HTML幫助(新API和格式)一個非常古老的FORTRAN程序的啓動winhelp的(舊的幫助格式)。我無法直接從這個舊代碼調用Win32 HtmlHelp API,因爲它會掛起(由堆棧大小和位置引起,這是我無法更改的)。

爲了繞過這個,我正在從Fortran代碼中解脫出一個新的進程,然後它有一個可以成功啓動幫助的默認堆棧大小。

使用SilverFrost C編譯器編譯幫助代理代碼,以便它不會引入任何更多的依賴關係(主應用程序是SilverFrost Fortran)。

+0

過程(B)**不退出**。 –

回答

0

幫助窗口由hhctrl.ocx模塊顯示,該模塊加載到調用由hhctrl.ocx導出的功能HtmlHelp的過程中。這意味着幫助窗口不能超過稱爲HtmlHelp的過程。因爲當該進程終止時,其窗口被銷燬,其模塊被卸載。

有一些方法,供您處理這個問題:

  1. 不要使用HtmlHelp功能,而使用幫助查看器進程hh.exe主辦的幫助文件。
  2. 安排進程A撥打電話HtmlHelp
  3. 通過不同的流程可以調用HtmlHelp,這是您當前使用的方法。
  4. 確保過程B活得過程A.
+0

謝謝,HH.exe幾乎完成了這項工作,它只是缺少按關鍵字搜索的功能(所以我不必升級所有舊的幫助鏈接)。這個工具看起來像它的工作,但現在似乎已被感染。 http://keyworks.helpmvp.com/home/keyhh。由於現有的Fortran代碼庫,選項2是不可能的。 –

相關問題