postmessage 的问题 ( 积分: 100 )

  • 主题发起人 主题发起人 xebaobei
  • 开始时间 开始时间
X

xebaobei

Unregistered / Unconfirmed
GUEST, unregistred user!
有一个STRING类型的变量 STR<br>我怎么把这个 STR 发给另外一个我的程序<br>并且让他接收到?<br>请给出个小例子,谢谢.
 
有一个STRING类型的变量 STR<br>我怎么把这个 STR 发给另外一个我的程序<br>并且让他接收到?<br>请给出个小例子,谢谢.
 
建议用WM_COPYDATA消息,自动作空间转换:<br><br>发送方:<br>procedure SendData(const SendText: string);<br>var<br> &nbsp;DS: TCopyDataStruct;<br>begin<br> &nbsp;DS.dwData := 0;<br> &nbsp;DS.cbData := Length(SendText);<br> &nbsp;DS.lpData := @SendText[1];<br> &nbsp;SendMessage(FindWindow('TForm1', 'Form1'), WM_COPYDATA, 0, LongWord(@DS));<br>end;<br><br>接受方:<br>var<br> &nbsp;Str: string;<br>begin<br> &nbsp;if (MessageID = WM_COPYDATA) then<br> &nbsp;begin<br> &nbsp; &nbsp;SetLength(Str, PCopyDataStruct(LParam)^.cbData);<br> &nbsp; &nbsp;CopyMemory(@Str[1], PCopyDataStruct(LParam)^.lpData, PCopyDataStruct(LParam)^.cbData);<br> &nbsp; &nbsp;MessageBox(0, @Str[1],'接收到', 0);<br> &nbsp;end;<br>end;
 
那另一边截获到WM_COPYDATA消息<br>怎么获得值啊?
 
对了<br>还忘记说了一个事情!<br>这个程序发完消息就关闭了
 
unit Unit1;<br><br>interface<br><br>uses<br> &nbsp;Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,<br> &nbsp;Dialogs;<br><br>type<br> &nbsp;TForm1 = class(TForm)<br> &nbsp; &nbsp;procedure WMCopyData(var Msg: TWMCopyData); message WM_COPYDATA;<br> &nbsp;end;<br><br>var<br> &nbsp;Form1: TForm1;<br><br>implementation<br><br>{$R *.dfm}<br><br>procedure TForm1.WMCopyData(var Msg: TWMCopyData);<br>var<br> &nbsp;S: string;<br>begin<br> &nbsp;SetLength(S, Msg.CopyDataStruct.cbData);<br> &nbsp;CopyMemory(@S[1], Msg.CopyDataStruct.lpData, Msg.CopyDataStruct.cbData);<br> &nbsp;ShowMessage(S);<br><br> &nbsp;inherited;<br>end;<br><br>end.
 
注意发送方的窗口不能是 Var Form1: TForm1;
 
谢谢麻子!<br>在你的东西里我学了好多!<br>发送方没窗口!<br>就是个DPR文件 发完就运行结束了
 
发送方没窗口不用紧,只要接受方有就可以。还有如果发完就要赶快结束,把SendMessage改为POSTMessage,应为SendMessage要等对方返回。<br>如果接受方没有窗口就用内存文件映射,其实SendMessage 的 WM_COPYDATA也是用的文件映射。
 
接受答案了.
 
发送方没窗口没有关系啊,就调用SendData()就可以了,<br>想不结束的话,后面写个循环,诸如:<br> while Sleep(1) do; / while GetMessage() do; 等等
 
后退
顶部