各位大哥举个wince下进程消息队列相互通信的例子

Zeltwanger   2009-3-10 22:12 楼主
跪求wince进程消息队列相互通信的例子

回复评论 (18)

CE下进程通信两种方式:
1.消息队列
2.文件映射

消息对列比较简单,不过是点对点的消息队列,使用到的API有WriteMsgQueue,ReadMsgQueue。不过你先得创建消息队列CreateMsgQueue

假设两个进程:进程1和进程2需要通信,那么分别创建消息队列MsgQue1(进程1创建),MsgQue2(进程2创建);
在这连个进程中创建线程来读取消息即可(写个死循环不停的读,用ReadMsgQueue)
点赞  2009-3-11 00:03
CE下进程通信两种方式:
1.消息队列
2.文件映射
?
点赞  2009-3-11 08:59
友情up
点赞  2009-3-11 09:06
致电friendfish,那应该怎么使用那些函数呢?怎么获得进程的句柄呢?给个通信的实际例子吗?
点赞  2009-3-11 09:30
引用: 引用 4 楼 manch1986 的回复:
致电friendfish,那应该怎么使用那些函数呢?怎么获得进程的句柄呢?给个通信的实际例子吗?

不需要获得进程的句柄,只需要通信的进程知道相互的消息队列句柄即可;
点赞  2009-3-11 10:04
或者你给进程的窗口发消息,这个需要知道窗口的句柄用PostMessage或SendMessage都行。
点赞  2009-3-11 10:08
大哥,能给个例子吗?
点赞  2009-3-11 10:25
怎么知道消息队列的句柄啊?
点赞  2009-3-11 10:29
给个具体的API行吗?
点赞  2009-3-11 10:31
引用: 引用 9 楼 manch1986 的回复:
给个具体的API行吗?

说说我的解决方法:进程间通信
1.发消息-利用windows系统的消息队列发送(基于窗口GUI机制)
使用API:
SendMessage/PostMessage:发送消息,参数需要窗口句柄;
FindWindow:查找窗口句柄,需要知道窗口名(title)

例:
进程P1,进程P2,需要通信,假设进程P1中有窗口名为“Window_P1”
那么通信时进程P2只需向进程P1中的“Window_P1”发送消息即可,(自定义系统,系统消息均可),如果数据量大可发送COPYDATA消息;进程P1只需要在窗口回调函数中处理相关消息即可;
如何发送消息,就用“SendMessage/PostMessage”,但是这两个API需要窗口句柄作为参数,我们只需要找到“Window_P1”的句柄就可以了。利用“FindWindow”函数,传入“Window_P1”便可获得“Window_P1”的句柄。
(如果你想问,进程P2怎么知道进程P1的窗口名,呵呵原因很简单,因为两个进程都是自己开发的自己写的代码,所以知道)
如果P1向P2发送消息,原理相同(需要有接受窗口);

2.点对点消息队列
这个方法说简单也不简单,上面说的有些不严谨,见谅
使用API:
CreateMsgQueue-创建点对点消息队列
WriteMsgQueue-向消息队列中写入消息
ReadMsgQueue-从消息队列中读取消息
OpenMsgQueue-打开已创建的消息队列
CloseMsgQueue-关闭消息队列

例:
进程P1,进程P2,需要通信
进程1创建消息队列"CreateMsgQueue",创建时需要制定队列的名字,和队列的属性,一般来说创建的时候只能指定队列为只读或只写属性;(如果两进程要相互读写消息,可能需要两个队列)函数原型:
  1. HANDLE CreateMsgQueue(
  2.   LPCWSTR lpszName,            //队列名
  3.   LPMSGQUEUEOPTIONS lpOptions  //队列属性
  4. );

参数具体含义不多说了,去MSDN中找;

进程P2也创建消息队列,名字同P1的相同,这样可获得相同的消息队列句柄;

然后利用ReadMsgQueue/WriteMsgQueue读写即可。(这里可能有问题,原来我们也遇到过,就是有时读写不成功,按照MSDN上的介绍需要使用OpenMsgQueue,但是OpenMsgQueue中需要进程句柄,在Win32下可以通过枚举系统进程然后在比较进程名来获得,但是CE下貌似不支持EnumProcesses函数,比较麻烦~)
如果你用.Net开发的话给你个网页看看:
http://msdn.microsoft.com/en-us/library/aa446556.aspx
里面对点对点的消息队列进行了封装,而且提供例程下载(用VS2003打开,其实他的实现也是直接创建然后读写的)。
注:下载的地方在Figure 1 的上面,慢慢找,不过推荐你看看此文,写得不错~

说了这么多,还是没有给个例程,见谅~




点赞  2009-3-11 17:30
还是要感谢大哥的呀
点赞  2009-3-12 09:36
program microsoft windows ce.net 第10章很详细的介绍了这方面的内容,而且有一个实例,你可以找来看看。如果找不到的话,留下邮箱,我可以发给你。
点赞  2009-3-12 11:35
我的邮箱manch1986@126.com,谢谢了啊
点赞  2009-3-16 08:48
我的邮箱manch1986@126.com,谢谢了啊
点赞  2009-3-16 08:49
建议楼主看看PM代码(MDD主要),那里面能学到不少东西。除了消息队列外,还有事件的运用(有点小技巧的)等等。
点赞  2009-3-16 17:09
学习,收藏了
点赞  2009-3-16 20:14
program microsoft windows ce.net我也想要份
jogholy@163.com
谢谢了!
点赞  2009-3-17 10:30
学习,收藏了
点赞  2009-12-2 16:23
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复