可以调用 HtmlHelp API 并将所有权传递给另一个进程
Possible to call HtmlHelp API and pass ownership to another process?
我从进程 B 调用 HtmlHelp 并传递另一个进程(进程 A,启动当前进程 B 的进程)的 HWND,以尝试将帮助窗口绑定到我的父进程 (A)。
然后我的进程 (B) 退出,但这仍然导致 HTML 帮助窗口也退出。如何避免帮助查看器退出并将其链接到进程 A 的生存期?
根据MSDN
hwndCaller 指定调用 HtmlHelp() 的窗口的句柄 (hwnd)。帮助窗口归此窗口所有。 当帮助窗口关闭时,HtmlHelp() 会将焦点返回给所有者,除非所有者是桌面。
API 调用很简单;
HtmlHelpA(procWindow, "hlp.chm", HH_DISPLAY_TOPIC, help_pointer);
背景:
我有一个非常旧的Fortran程序,它启动winhelp(旧的帮助格式),我正在将其迁移到HtmlHelp(较新的API和格式)。我无法直接从此旧代码调用 Win32 HtmlHelp API,因为它挂起(由堆栈大小和位置引起,我无法更改)。
为了绕过这一点,我正在从Fortran代码中掏出一个新进程,然后该进程具有可以成功启动帮助的默认堆栈大小。
帮助代理代码是使用 SilverFrost C 编译器编译的,因此它不会引入更多的依赖项(主要应用程序是 SilverFrost Fortran)。
帮助窗口由加载到调用函数的进程中的hhctrl.ocx
模块显示 HtmlHelp
hhctrl.ocx
导出。这意味着帮助窗口不能超过调用HtmlHelp
的进程。因为当该进程终止时,它的窗口被销毁,它的模块被卸载。
您可以通过一些方法处理此问题:
- 不要使用
HtmlHelp
函数,而是使用帮助查看器进程hh.exe
来托管帮助文件。 - 安排进程 A 以调用
HtmlHelp
。 - 让不同的进程调用
HtmlHelp
,这是您当前使用的方法。 - 确保进程 B 的寿命超过进程 A。
相关文章:
- 如何在C++中将函数发送到另一个进程
- 如何从另一个进程解开全局钩子?
- 如何使用带有矢量的 winapi 读取进程内存从另一个进程读取缓冲区?
- 如何在MPI中将矩阵从一个进程转移到另一个进程
- 将vector<vector<double>>从x86平台中创建的一个进程发送到x64中构建的另一个进程的最快方法是什么
- 通过 c++ 中的 udp 套接字将派生类对象从一个进程发送到另一个进程
- 如何:监视Windows中另一个进程的文件访问?
- 是否可以注入一个进程并获取给定的句柄,然后使用它们注入另一个进程
- 尝试启动另一个进程并通过 MPI 加入它,但获得访问冲突
- 将窗口句柄从一个进程使用到另一个进程(插件 vst 音频)
- 启动另一个进程的最佳方式C++?
- Win32/Gdigrab - 如何将另一个进程窗口设置为无边框
- 为什么我不能用这个函数在Qt框架中打开另一个进程?
- 如何使用 C# 在 Windows 中获取另一个进程库地址
- 如何在没有窗口类的情况下编写QT系统托盘应用程序,并将其与另一个进程集成
- GetWindowText 返回另一个进程的空字符串
- 如何获取另一个进程的基址?(美国法律评论)
- 如何在C++中将字节数组发送到另一个进程
- 从另一个进程设置 HWND 的 lpfnWndProc
- 如何将记忆映射的文件与另一个进程写入文件同步