两个Delphi进程之间可以利用sendmessage进行通信,而且sendmessage是一种阻塞式的通信方式,也就是说它发送完信息后必须要等到应答信息才会继续往下执行。
所以想到利用sendmessage在两个进程A、B间进行交互,也就是进程A向B发送一个消息,然后B对消息处理后把结果返回A。
但是目前我看到的例程中好像Delphi收到信息后可以直接完成应答过程,无需人工参与,所以无法把处理结果人工返回发送者。
所以我现在需要人工来做此应答信息,不知道具体如何实现?(包括接收消息、消息过滤、消息处理、消息应答过程)希望各位高手帮忙,最好能给出接收端的源代码,万分感谢!

解决方案 »

  1.   

    用POSTMESSAGE发送消息,A向B发送POSTMESSAGE消息,B中自己写消息接受函数, 在接受函数中处理消息,处理完向A发送POSTMESSAGE 消息,A中自己写返回消息的处理函数
      

  2.   

    可能大家没看懂我的意思,我的意思是:要通过sendmessage在A和B之间进行实时交互,A必须要受到应答才能往下执行,如何在B程序中实现这个实时应答?这个应答是经过B程序处理后的结果,所以这部分代码必须要人工完成,而且不能像postmessage那样等半天再回应,那是不行的!
      

  3.   

    用RegisterWindowMessage自定义消息 接受的窗口覆盖WndProc进行处理
      

  4.   

    A要收到应答才往下走,那B收到消息处理后将msg.result := 1就可以了
    A : whilt not sendmessage() do begin Application.Processmessage ;end;
    B : 处理完后直接 Msg.Result := 1;另外,用Sendmessage的方式,如果不用 application.MainForm.Handle 这个句柄来发送消息的,而使用
    Application.Handle作为句柄的话,有可能绕过消息队列,直接发给应用程序窗口,而WndProc这个过程只处理在消息队列中的消息,所以,如果覆盖WndProc这个过程,那你可能会收不到消息,往往一个应用程序有可能有多个窗口,所以你发消息时,最好指定一个主窗体,然后在这个窗体上写消息接收事件。对于发给Application.Handle的消息,用子类化的方式,就可以拦截到sendmessage发过来的消息
      

  5.   

    笔误
    whilt not sendmessage() do begin Application.Processmessage ;end;
    改为
    whilt not boolean(sendmessage()) do begin Application.Processmessage ;end;
      

  6.   

    有个消息函数SendMessageCallBack()参考下。SendMessage()只能返回函数调用结果,SendMessageCallBack()可以返回处理结果