如何将窗口句柄传递给子进程?

时间:2012-08-16 07:18:00

标签: windows winapi

我正在开展一个设计不同的特殊项目。

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

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

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

我应该将Window Handle传递给main函数吗?怎么样?

由于

2 个答案:

答案 0 :(得分:12)

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

答案 1 :(得分:1)

  1. 创建一个命名的互斥(全局),这样两个进程都可以访问它, 并接受它。
  2. 产生第二个过程。它应该等待互斥锁 被释放。
  3. 然后,您可以使用任何进程间通信方法传递窗口句柄;最简单的可能是Shared Memory。只需将重复的句柄写入共享内存即可。
  4. 释放互斥锁,以便第二个进程可以抓住它。
  5. 从共享内存中读取句柄。现在可以安全使用它。
  6. 整个互斥操作只是为了确保在写入任何内容之前,第二个进程不会从共享内存中读取。

    (感谢@JonathanPotter评论)