[请教]windows平台用C++写两个console程序,利用进程间通信机制,进行消息交互,如何实现?

时间:2020-12-22 14:01:49
需求如题:
1.不是要console接受windows的系统消息
2.不希望两个console间通过socket、管道、共享内存等方式,就想了解下怎么写进程间的消息收发

例如自己写了两个console程序a.exe  b.exe,那么这就是两个进程了,如何自己编写a和b的代码,使得a发送“12345”字串,b能接收并打印出来。


没怎么接触过windows编程,问题比较弱智,见笑了,麻烦给个具体的例子,千万别说“去查MSDN就知道了”,呵呵。

11 个解决方案

#1


采用套接字通信更加简单点啊,

#2


先说为什么非得用消息... 消息依赖线程,而悲催的是线程这东西没有name,于是你不得不以各种诡异的方法去获得线程句柄——前提是这个线程挂在别的有name的东西上。

#3


楼主你为什么这么纠结啊,为什么要达到这种要求呢?搞不懂

#4


引用 2 楼 bluewanderer 的回复:
先说为什么非得用消息... 消息依赖线程,而悲催的是线程这东西没有name,于是你不得不以各种诡异的方法去获得线程句柄——前提是这个线程挂在别的有name的东西上。

大家都问原因.....
这个,因为我以前没弄过windows编程,刚接触,就好奇呗,套接字编程比较熟悉,想换种方式。

我觉得一个进程,一个消息队列,这种方式很好理解,应该支持,所以,就像用这个方式,试试看了

#5


可以换种思路啊

#6


引用 4 楼 bearzyjbearzyj 的回复:
引用 2 楼 bluewanderer 的回复:

先说为什么非得用消息... 消息依赖线程,而悲催的是线程这东西没有name,于是你不得不以各种诡异的方法去获得线程句柄——前提是这个线程挂在别的有name的东西上。

大家都问原因.....
这个,因为我以前没弄过windows编程,刚接触,就好奇呗,套接字编程比较熟悉,想换种方式。

我觉得一个进程,一个消息队列,这种方式很好理解……
说起来简单,A给比发送消息,信息:abcd,abcd可是在a的进程空间,在B中时无效的。这样,必须现在B中开辟内存(WriteProcessMemory)

#7


如果a.exe b.exe都是打开的,就用套接字吧,这个毫无疑问
如果不是同时打开的,可以写到文件里面去。读取文件就行了,要加密也行啊

#8


楼主唯独漏掉了消息队列..

#9


引用 8 楼 qq120848369 的回复:
楼主唯独漏掉了消息队列..


您好,我想,我想采用的应该,就是您所说的“消息队列”了,这个具体如何实现呢?我找到一些例子,大致的意思是,先写个Hook,在系统中注册,然后就可以收发消息了……

您说的是这样的方式吗?我看过那个例程,似乎只能接收到系统消息,有方法可以自定义消息,并用PostMessage等函数发送吗?

#10


只要你知道线程id,你就可以用PostThreadMessage向任何进程的线程发送消息。但是问题我也说过了,想不通过任何其他进程间通讯手段获得一个进程外线程的id是一个非常不优雅的事,往往是通过搜索窗口之类的不可靠手段间接获得。

如果你真想简单问题复杂化,不如去研究下COM的进程间通讯。

#11


个人意见:进程间通讯最简单莫过于用共享纯文本文件。

#1


采用套接字通信更加简单点啊,

#2


先说为什么非得用消息... 消息依赖线程,而悲催的是线程这东西没有name,于是你不得不以各种诡异的方法去获得线程句柄——前提是这个线程挂在别的有name的东西上。

#3


楼主你为什么这么纠结啊,为什么要达到这种要求呢?搞不懂

#4


引用 2 楼 bluewanderer 的回复:
先说为什么非得用消息... 消息依赖线程,而悲催的是线程这东西没有name,于是你不得不以各种诡异的方法去获得线程句柄——前提是这个线程挂在别的有name的东西上。

大家都问原因.....
这个,因为我以前没弄过windows编程,刚接触,就好奇呗,套接字编程比较熟悉,想换种方式。

我觉得一个进程,一个消息队列,这种方式很好理解,应该支持,所以,就像用这个方式,试试看了

#5


可以换种思路啊

#6


引用 4 楼 bearzyjbearzyj 的回复:
引用 2 楼 bluewanderer 的回复:

先说为什么非得用消息... 消息依赖线程,而悲催的是线程这东西没有name,于是你不得不以各种诡异的方法去获得线程句柄——前提是这个线程挂在别的有name的东西上。

大家都问原因.....
这个,因为我以前没弄过windows编程,刚接触,就好奇呗,套接字编程比较熟悉,想换种方式。

我觉得一个进程,一个消息队列,这种方式很好理解……
说起来简单,A给比发送消息,信息:abcd,abcd可是在a的进程空间,在B中时无效的。这样,必须现在B中开辟内存(WriteProcessMemory)

#7


如果a.exe b.exe都是打开的,就用套接字吧,这个毫无疑问
如果不是同时打开的,可以写到文件里面去。读取文件就行了,要加密也行啊

#8


楼主唯独漏掉了消息队列..

#9


引用 8 楼 qq120848369 的回复:
楼主唯独漏掉了消息队列..


您好,我想,我想采用的应该,就是您所说的“消息队列”了,这个具体如何实现呢?我找到一些例子,大致的意思是,先写个Hook,在系统中注册,然后就可以收发消息了……

您说的是这样的方式吗?我看过那个例程,似乎只能接收到系统消息,有方法可以自定义消息,并用PostMessage等函数发送吗?

#10


只要你知道线程id,你就可以用PostThreadMessage向任何进程的线程发送消息。但是问题我也说过了,想不通过任何其他进程间通讯手段获得一个进程外线程的id是一个非常不优雅的事,往往是通过搜索窗口之类的不可靠手段间接获得。

如果你真想简单问题复杂化,不如去研究下COM的进程间通讯。

#11


个人意见:进程间通讯最简单莫过于用共享纯文本文件。