不同程序的间经常需要进行消息通讯
定义一个消息结构体
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