walnutcy

基于消息机制的进程通信

0
阅读(2079)

要控制整个系统,就得处理进程的同步,通信等一大堆问题,

在WinCE里,最简单的方式就是消息通信,一般采用PostMessage,

BOOL PostMessage(
  HWND Msg,       // message
  WPARAM lParam   // second message parameter
);

PostMessage将消息放入目标窗口的消息队列,同时也支持广播消息(hWnd =HWND_BROADCAST)。

由于广播消息所有窗口都会处理,为了减轻系统负载,我们就需要针对目标窗口发送消息,即给定hWnd的值。

为了得到hWnd的值,我们有两种方式:

1) 查找窗口,通过查找窗口来找到目标窗口,给定ClassName或WindowName均可,不确定的用NULL代替。

HWND FindWindow(
  LPCTSTR lpWindowName  // window name
);

2) 枚举进程,通过进程名来识别

通过ToolHelp函数对系统中所有进程遍历,CreateToolhelp32Snapshot获取进程相关信息,最后得到句柄。

这里我实现了一个简单的实例,通过右边的对话框控制左边的动作。

  hGISViewWnd = ::FindWindow(NULL,_T("GISView"));
 if(hGISViewWnd != NULL)
 {
  ::PostMessage(hGISViewWnd,WM_COMMAND,1003,1);
 }