有请hllu与sunstone:(0分)

  • 主题发起人 主题发起人 netbug
  • 开始时间 开始时间
N

netbug

Unregistered / Unconfirmed
GUEST, unregistred user!
一:你们说:用sendMessage来把edit中的字符串发送给另一个应用程序,<br>那我在此应用程序中还要设置一个发送事件,那我想问:如果我想获得<br>象记事本等这样的应用程序中的内容(它们不能设置事件),我该如何做呢?<br>二:用sendMessage来把edit中的字符串发送给另一个应用程序,它是把<br>此字符串先送到一个buffer,如:SendMessage(h,WM_GETTEXT,249,Integer(U)),<br>我想请教一下:我在接受方该如何接受buffer的地址?<br>(如:以下是我写的,不知对不对,请赐教:<br>procedure TForm1.Mymessage(var t:pointer);message wm_gettext; <br>begin <br>edit1.text:=t^;//接受数据并显示。<br>end;)<br>我想问:接受方消息过程中的参数var t:pointer是与发送方中的哪个参数<br>对应起来?<br>谢谢。<br>
 
1, 其实应该给写字板中的 memo 控件发信息,才能得到里面的内容。<br>2,WM_GETTEXT 不需要你写,你只需要发送就行乐,看来老兄对消息<br>&nbsp; &nbsp;发送还不是特别明白,buffer 的地址由你自己在程序中指定。<br>&nbsp; &nbsp;由于手头没有 delphi , 不能给你例子, 很抱歉。
 
SendMessage(h,WM_GETTEXT,249,Integer(U))直接在你的程序中写入,不需要替换消息.
 
你 send wm_gettext and wm_settext 时是由edit来响应处理事件,你只管发消息就行了。<br>同样,如果你想接收 wm_settext, 处理这个消息就行了,<br>你的例子好象弄翻了, 应该是 wm_settext, 注意是其它程序给你 settext, 如果你得到wm_gettext, 表明是有程序想得到你的text.<br>
 
我还是高不明白,能不能写出程序?谢谢。
 
如果想得到别的程序editbox中的内容,可以得到该editbox的句柄,然后发<br>WM_COPY,将其内容拷贝到剪贴板,然后在粘贴过来。不知道这一着对notepad<br>有没有用,估计用winsight看看就知道了。<br>至于想在自己做的两个程序之间共享数据,可以通过filemapping,是最可靠的<br>方法。传递指针是最危险的事情。
 
其它地方看到的,我试验过,OK。<br><br>利用WM_COPYDATA消息<br><br>使用该消息涉及一个TcopyDataStruct结构类型的指针。该结构中有三个成员:<br>dwData 是一个32位的附加参数<br>cbData 表示要传递的数据区的大小<br>lpData 表示要传递的数据区的指针<br>下面举个例子。该例子由两个程序构成,分别为SendData和GetData。<br>SendData程序向GetData程序发送消息,并传递edit1中的字符串;GetData在收到消息后,把SendData发送的字符串接受下来,并显示在相应的edit1中。<br>1. SendData程序:<br>……<br>var<br>&nbsp; Form1: TForm1;<br>implementation<br>{$R *.DFM}<br>procedure TForm1.Button1Click(Sender: TObject);<br>var<br>&nbsp; ds: TCopyDataStruct;<br>&nbsp; hd: THandle;<br>begin<br>&nbsp; ds.cbData := Length (Edit1.Text) + 1;<br>&nbsp; GetMem (ds.lpData, ds.cbData ); //为传递的数据区分配内存<br>&nbsp; StrCopy (ds.lpData, PChar (Edit1.Text));<br>&nbsp; Hd := FindWindow (nil, 'Form2'); // 获得接受窗口的句柄<br>&nbsp; if Hd &lt;&gt; 0 then<br>&nbsp; &nbsp; &nbsp; &nbsp;SendMessage (Hd, WM_COPYDATA, Handle,<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Cardinal(@ds)) // 发送WM_COPYDATA消息<br>&nbsp; else<br>&nbsp; &nbsp; ShowMessage ('目标窗口没找到!');<br>&nbsp; &nbsp;FreeMem (ds.lpData); //释放资源<br>end;<br><br>2. GetData程序:<br>&nbsp; TForm2 = class(TForm)<br>&nbsp; &nbsp; Edit1: TEdit;<br>&nbsp; private<br>&nbsp; &nbsp; { Private declarations }<br>&nbsp; public<br>&nbsp; &nbsp; procedure Mymessage(var t:TWmCopyData);message WM_COPYDATA;<br>&nbsp; &nbsp; { Public declarations }<br>&nbsp; end;<br>var<br>&nbsp; Form2: TForm2;<br>implementation<br>procedure TForm2.Mymessage(var t:TWmCopyData);<br>begin<br>&nbsp; &nbsp;Edit1.text:=StrPas(t.CopyDataStruct^.lpData);//接受数据并显示。<br>end;
 
时间太久,强制结束。 &nbsp; wjiachun
 
后退
顶部