http://community.csdn.net/Expert/topic/3969/3969338.xml?temp=.1657068想在两个exe之间传送消息,第一次Tfrm_shuaka发送,Tfrm_messege接受成功;第二次Tfrm_messege发送,Tfrm_shuaka接受不成功!代码如下:
//Tfrm_shuaka中:
procedure Tfrm_shuaka.WMSend();
var
Data: TCopyDataStruct;
Buffer: PChar;
BufferSize: Integer;
begin
BufferSize := Self.Edit1.GetTextLen + SizeOf(Char);
Buffer := AllocMem(BufferSize);
try
Self.Edit1.GetTextBuf(Buffer, BufferSize);
Data.cbData := BufferSize;
Data.lpData := Buffer;
SendMessage(FindWindow(nil, 'frm_messege'), WM_COPYDATA, Handle, Longint(@Data));
finally
FreeMem(Buffer);
end;
end;
///
//接受
procedure Tfrm_shuaka.WndProc(var Message: TMessage);
begin
if Message.Msg = WM_COPYDATA then Self.WMCopyData(Message)
else inherited WndProc(Message);
end;procedure Tfrm_shuaka.WMCopyData(var Message: TMessage);
begin Self.Edit1.SetTextBuf(PChar(PCopyDataStruct(Message.LParam)^.lpData));
end;
///
Tfrm_messege中:
//接受
procedure Tfrm_messege.WndProc(var Message: TMessage);
begin
if Message.Msg = WM_COPYDATA then Self.WMCopyData(Message)
else inherited WndProc(Message);
end;
///Edit1
procedure Tfrm_messege.WMCopyData(var Message: TMessage);
begin
//Caption := 'Get Data from Form1' ;
Self.Edit1.SetTextBuf(PChar(PCopyDataStruct(Message.LParam)^.lpData));
end;
// 发送
procedure Tfrm_messege.WMSend();
var
t_Data: TCopyDataStruct;
t_Buffer: PChar;
t_BufferSize: Integer;
begin
//BufferSize := Self.MemoData.GetTextLen + SizeOf(Char); //bsSkinDBEdit1
t_BufferSize := Self.Edit2.GetTextLen + SizeOf(Char);
t_Buffer := AllocMem(t_BufferSize);
try
//Self.MemoData.GetTextBuf(Buffer, BufferSize);
Self.Edit2.GetTextBuf(t_Buffer, t_BufferSize);
t_Data.cbData := t_BufferSize;
t_Data.lpData := t_Buffer;
SendMessage(FindWindow(nil, 'frm_shuaka'), WM_COPYDATA, Handle, Longint(@t_Data));
finally
FreeMem(t_Buffer);
end;
end;
//Tfrm_shuaka中:
procedure Tfrm_shuaka.WMSend();
var
Data: TCopyDataStruct;
Buffer: PChar;
BufferSize: Integer;
begin
BufferSize := Self.Edit1.GetTextLen + SizeOf(Char);
Buffer := AllocMem(BufferSize);
try
Self.Edit1.GetTextBuf(Buffer, BufferSize);
Data.cbData := BufferSize;
Data.lpData := Buffer;
SendMessage(FindWindow(nil, 'frm_messege'), WM_COPYDATA, Handle, Longint(@Data));
finally
FreeMem(Buffer);
end;
end;
///
//接受
procedure Tfrm_shuaka.WndProc(var Message: TMessage);
begin
if Message.Msg = WM_COPYDATA then Self.WMCopyData(Message)
else inherited WndProc(Message);
end;procedure Tfrm_shuaka.WMCopyData(var Message: TMessage);
begin Self.Edit1.SetTextBuf(PChar(PCopyDataStruct(Message.LParam)^.lpData));
end;
///
Tfrm_messege中:
//接受
procedure Tfrm_messege.WndProc(var Message: TMessage);
begin
if Message.Msg = WM_COPYDATA then Self.WMCopyData(Message)
else inherited WndProc(Message);
end;
///Edit1
procedure Tfrm_messege.WMCopyData(var Message: TMessage);
begin
//Caption := 'Get Data from Form1' ;
Self.Edit1.SetTextBuf(PChar(PCopyDataStruct(Message.LParam)^.lpData));
end;
// 发送
procedure Tfrm_messege.WMSend();
var
t_Data: TCopyDataStruct;
t_Buffer: PChar;
t_BufferSize: Integer;
begin
//BufferSize := Self.MemoData.GetTextLen + SizeOf(Char); //bsSkinDBEdit1
t_BufferSize := Self.Edit2.GetTextLen + SizeOf(Char);
t_Buffer := AllocMem(t_BufferSize);
try
//Self.MemoData.GetTextBuf(Buffer, BufferSize);
Self.Edit2.GetTextBuf(t_Buffer, t_BufferSize);
t_Data.cbData := t_BufferSize;
t_Data.lpData := t_Buffer;
SendMessage(FindWindow(nil, 'frm_shuaka'), WM_COPYDATA, Handle, Longint(@t_Data));
finally
FreeMem(t_Buffer);
end;
end;
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货