首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

通过SendMessage发送字符串给另一个程序,另一个程序怎么接收该字符串

2012-02-12 
通过SendMessage发送字符串给另一个程序,另一个程序如何接收该字符串发送程序为:SendMessage(hWnd,WM_USER

通过SendMessage发送字符串给另一个程序,另一个程序如何接收该字符串
发送程序为:
SendMessage(hWnd,   WM_USER   +   1,   0,   Integer(PChar( 'hello   world ')));

接收程序为:
procedure   TForm1.WndProc(var   Message:   TMessage);
begin
    if   Message.Msg   =   WM_USER   +   1   then
    begin
        //如何接收传递过来的字符串 'hello   world '
    end
    else
        inherited   WndProc(Message);
end;

[解决办法]
用SendMessage函数, 最多利用wParam和lParam两个参数发送8个字符(对应wParam和lParam所占据的8个字节)。
进程间要进行字符串内容的通讯,SendMessage不是一个好方法。换命名管道、DDE、Socket、共享内存……吧。
[解决办法]
用进程间通信吧,其中利用WM_COPYDATA消息也可以
发送:
TForm1 = class(TForm)
Edit1: TEdit;
private
{ Private declarations }
public
procedure Send(Msg:string);
procedure Mymessage(var t:TWmCopyData);message WM_COPYDATA;
{ Public declarations }

end;

var

Form1: TForm1;

implementation

procedure TForm1.Send(Msg:string); //发送数据
var
ds: TCopyDataStruct;
begin
ds.cbData := Length (Msg) + 1;
GetMem (ds.lpData, ds.cbData ); //为传递的数据区分配内存
StrCopy (ds.lpData, PChar (Msg));
SendMessage (Handle, WM_COPYDATA, Handle,Cardinal(@ds)) // 发送WM_COPYDATA消息
FreeMem (ds.lpData);
end;

procedure TForm2.Mymessage(var t:TWmCopyData);
begin
Edit1.text:=StrPas(t.CopyDataStruct^.lpData);//接受数据并显示。
end;

热点排行