实现不同程序间的消息通讯

不同程序的间经常需要进行消息通讯

定义一个消息结构体

type
  PMsgRecord = ^TMsgRecord;
  TMsgRecord = record
      cmd: array[0..20] of char; //消息命令名
      param: array[0..30] of char;//消息参数,可以根据需要增加参数个数
  end;


 

发送代码

{-------------------------------------------------------------------------------
  过程名:    SendAppMsg
  日期:      2010.08.12
  参数:      strFormName: string; 接收方窗体的标题名

             strCmd,strParam: string
  返回值:   
  说明:      向某一程序发送消息
-------------------------------------------------------------------------------}
procedure SendAppMsg(strFormName: string; strCmd,strParam: string);
var
  h: HWND;
  CopyDataStruct: TCopyDataStruct;
  MsgRecord: PMsgRecord;
begin
  GetMem(MsgRecord, SizeOf(MsgRecord));
  try
    h := FindWindow(nil, Pchar(strFormName)); { 按标题查找目标窗口 }
    if h > 0 then
    begin
      StrPCopy(MsgRecord^.cmd, strCmd);
      StrPCopy(MsgRecord^.param, strParam);
      CopyDataStruct.lpData := MsgRecord; //要发送的结构体

      CopyDataStruct.cbData := SizeOf(TMsgRecord)+1; // 指定要发送的结构体的大小
      CopyDataStruct.dwData := WM_COPYDATA; //指定消息类型
      SendMessage(h, WM_COPYDATA, 0, Integer(@CopyDataStruct)); //发送
    end;
  finally
    FreeMem(MsgRecord, SizeOf(MsgRecord));
  end;
end;

调用实例

SendAppMsg('窗体标题', '命令名','命令参数');

 

接收方代码

procedure WMCopyData(var msg: TWMCopyData); message WM_COPYDATA;

 

procedure WMCopyData(var msg: TWMCopyData);
var
  MsgRecord: PMsgRecord;
begin
  MsgRecord := msg.CopyDataStruct.lpData;
  Caption := MsgRecord.cmd + '' MsgRecord.param;

end;

来自东子哥的Blog

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值