PostThreadMessage到另一个进程

时间:2010-06-21 10:38:09

标签: c++ windows visual-c++ windows-services multithreading

我想将消息发布到作为另一个进程运行的线程(特别是作为Windows服务)。我已经阅读了PostThreadMessage的文档,但有些事情我不清楚。

如何获取服务线程的句柄?

  

系统仅对系统消息进行编组(范围为0到(WM_USER-1))。要将其他消息(那些> = WM_USER)发送到另一个进程,您必须执行自定义编组。

我想发送自己的消息,那么我该如何进行编组呢?

1 个答案:

答案 0 :(得分:3)

PostThreadMessage在这里不太理想。获取线程ID确实是一个问题,因为您的服务必须运行多个线程。一个用于实现服务,另一个用于泵送读取消息所需的消息循环。 CreateToolHelp32Snapshot()可以枚举线程,但你仍然不知道这两个线程中的哪一个是抽线的。

请改用命名管道。在您的服务中调用CreateNamedPipe(),使用消息模式并为管道指定一个前缀为“Global”的名称,以便它在用户会话中可见。用户代码可以使用众所周知的管道名称连接到管道。您可以通过管道发送任何您想要的内容但是您必须避免使用指针,因为它们在服务进程中无效。与消息编组相同的问题。

其他可能性是套接字,非常类似于管道,但使用众所周知的端口号而不是名称,以及进程外COM。如果您需要跨进程边界封送复杂对象,则使用COM是一个优势。如果你没有COM技能,请避免使用它。

相关问题