怎样向另外一个程序中窗体上的Edit写字符串(200分)

  • 主题发起人 主题发起人 c~c
  • 开始时间 开始时间
C

c~c

Unregistered / Unconfirmed
GUEST, unregistred user!
举例如下:<br>A程序是一个正在运行的独立的程序,该程序窗体上有一个Edit(注意A程序不一定是Delphi写的,有可能是VC,VB等其他程序).<br>现在我要用Delphi写一个程序,来实现<br>1、遍历A程序窗体上所有的控件。<br>2、对某一个Edit控件写一行字符串。
 
FindWindow() and FindWindowEx //找到Edit的句柄vHandle<br>SendMessage(vHandle, WM_SETTEXT, 0, Integer(PChar('发送的字符')));<br><br>///////////////////////得到其他窗体edit的句柄<br>procedure TForm1.Button1Click(Sender: TObject);<br>&nbsp;function EnumChildWindowsProc(hwnd: Integer; lparam: Longint):Boolean; stdcall;<br>&nbsp; var<br>&nbsp; &nbsp; buffer: array[0..255] of Char;<br>&nbsp; begin<br>&nbsp; &nbsp; Result := True;<br>&nbsp; &nbsp; //得到目标窗口的控件<br>&nbsp; &nbsp; GetClassName(hwnd,buffer,256);<br>&nbsp; &nbsp; //找到发消息的目标窗口的目标控件<br>&nbsp; &nbsp; if StrPas(Buffer)='TEdit' then<br>&nbsp; &nbsp; begin<br>&nbsp; &nbsp; &nbsp; PInteger(lparam)^ := hwnd; 得到目标控件的Hwnd(句柄)<br>&nbsp; &nbsp; &nbsp; Result:=False; &nbsp;//终止循环<br>&nbsp; &nbsp; end;<br>&nbsp; end;<br>var<br>&nbsp; Handle: Integer;<br>&nbsp; buffer: Array[0..1023] of Char;<br>begin<br>&nbsp; Handle := FindWindow(nil,'另个窗口名'); &nbsp;//就是窗口的Caption<br>&nbsp; if Handle&lt;&gt;0 then<br>&nbsp; &nbsp; begin <br>&nbsp; &nbsp; &nbsp; EnumChildWindows(Handle,@EnumChildWindowsProc,Integer(@Handle));<br>&nbsp; &nbsp; &nbsp;//如果找到就是Handle,如果没找到Handle,还是窗口<br>&nbsp; &nbsp; &nbsp;//下面这句是测试<br>&nbsp; &nbsp; &nbsp; SendMessage(Handle,WM_SETTEXT,0,Integer(pchar('Your String')));<br>&nbsp; &nbsp; end;<br>end;<br>
 
to 雪中漫步:<br>哈哈,在没看你的程序之前我也写了出来。<br>但关键是我要特定的程序并且是指定的Edit。有可能这个窗体上有很多个Edit,但我会分别对他们写数据的。
 
唉!无论如何,至少尊重“雪”的劳动啊!
 
既然是特定的程序,你就应该自己分析一下指定的Edit有什么特点,可以用winsight、spy之类的工具看一下,一般可以通过ID、位置、创建次序等来区分
 
>>to 雪中漫步:<br>>>哈哈,在没看你的程序之前我也写了出来。<br>  你既然已经写出来了,你还有什么可问的,问题不就已经解决了吗?得了便宜还卖乖,<br>&nbsp; &nbsp; 强烈bs楼主。声明,我不是来抢分的。<br><br>
 
其实我是很感谢“雪中漫步”的,只是由于一时疏忽,没有加上“谢谢”,在此对“雪中漫步”表示歉意,我会给你加上分的,只是这个问题还没有最终达到我想要的。
 
Result:=False; &nbsp;//终止循环<br><br>这里不要返回false就行了<br>
 
Edit &nbsp;也是窗口 ,应该有窗口标题或其他可以类似 “Name”等的属性。把<br>这个属性也找出来,就行了。
 
还有没有更好的方法的<br>
 
雪中漫步和weiwei81123都已经将思路讲出来了,楼主还有什么不明白的。
 
呵呵.我原来问过类似的问题.我就不粘出来抢分了.呵呵.<br>主要思路就是在后台给那个应用程序发键盘消息就行了.<br>如果只有一个程序正常运行可以不用findwindows,直接到后台然后模拟键盘就行了.<br>http://delphibbs.com/delphibbs/dispq.asp?lid=1099425
 
同意:&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;雪中漫步<br>&gt;&gt;&gt;FindWindow() and FindWindowEx //找到Edit的句柄vHandle<br>&gt;&gt;&gt;SendMessage(vHandle, WM_SETTEXT, 0, Integer(PChar('发送的字符')));
 
楼主,请问,什么叫指定???
 
&gt;&gt;2、对某一个Edit控件写一行字符串。<br>窗体上有很多个Edit控件,而你只对某一个,又没有说明是那个Edit控件,你说怎么知道向那个Edit控件发送字符呢。
 
多人接受答案了。
 
后退
顶部