7

我正在做一个设计不寻常的特殊项目。

在我的应用程序/流程中,我将创建一个子流程来做一些工作。在我的流程中,我需要从子流程中获得反馈。我想将我的应用程序/进程的 Windows 句柄传递给这个子进程,所以我从这个子进程发布消息。

如何将窗口句柄传递给子进程?我的子进程是一个没有 Window UI 的命令行应用程序,主要功能如下:

int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
                   LPTSTR lpCmdLine, int nCmdShow)

我应该将窗口句柄传递给主函数吗?如何?

谢谢

4

2 回答 2

14

窗口句柄 (HWND) 对系统来说是全局的,因此您可以将句柄作为十进制数字打印到字符串缓冲区中,当您使用 CreateProcess 生成子进程时将其作为字符串传递到命令行,然后调用 _wtoi()或类似的再次将字符串转换回句柄。

于 2012-08-16T08:48:36.890 回答
2
  1. 创建一个命名的互斥锁(全局),以便两个进程都可以访问它并获取它。
  2. 产生第二个进程。它应该等待互斥体被释放。
  3. 然后,您可以使用任何进程间通信方法传递窗口句柄;最简单的可能是共享内存。只需将复制的句柄写入共享内存即可。
  4. 释放互斥锁,以便第二个进程可以抓住它。
  5. 从共享内存中读取句柄。现在可以安全使用它了。

整个互斥锁操作只是为了确保第二个进程在写入任何内容之前不会从共享内存中读取。

(感谢@JonathanPotter 的评论)

于 2012-08-16T07:31:29.737 回答