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

来源:互联网 发布:mac电脑必备软件 编辑:程序博客网 时间:2024/05/19 13:06

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

定义一个消息结构体

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); messageWM_COPYDATA;

 

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

end;

来自东子哥的Blog

原创粉丝点击