如何清空一个外部程序的EDIT输入框里的内容?(100分)

  • 主题发起人 主题发起人 32881
  • 开始时间 开始时间
3

32881

Unregistered / Unconfirmed
GUEST, unregistred user!
一个外部程序,输入框里边默认有内容。.<br>如何通过编程清空EDIT中的内容呢??<br><br>我的思路是: 找到外部程序的 EDIT 句柄..<br>通过发消息清空..<br>但是, 如何发消息清空不知道了,搜索也没找到答案. 知道的麻烦告诉一下小弟..<br><br>或告知合适的解决方法,送上 100 小分,, 多谢!
 
知道句柄可以直接setwindowtext<br>但觉得还是发消息的好
 
SendMessage(hEdit,WM_SETTEXT,0,0);
 
除了消息外,可以考虑窗体绑架技术,对于与外部执行程序交互这一块,传统方法是消息,但是在2000,XP下,用窗体绑架也是个不错的选择
 
我也遇到类似的问题,我要对外部exe上的一个edit进行赋值,然后执行回车动作。<br>请问lz如何获得外部程序中的edit的句柄啊?<br>我只能得到外部程序的窗口的句柄<br>to [xiaopei]:<br>如果我要对edit赋值,SendMessage 的参数应该怎样赋值啊?
 
var pStr:pChar;<br>begin<br>&nbsp; pStr := 'Test Set Text Message';<br>&nbsp; SendMessage(hEdit,WM_SETTEXT,0,LongWord(pStr));<br>end;
 
谢谢[xiaopei],看来我的 SendMessage函数用对了,现在就是我不知道怎样获得edit的句柄。我是用ShellExecute来调用外部exe的。代码如下<br>&nbsp; ShellExecute(Handle,'open',Pchar('D:/SoftWareDesign/InputFP.exe'),'-s','',SW_SHOWNORMAL);<br>&nbsp; HWndInputFP:= FindWindow(nil,'INPUTFP');---这句只能获得那个exe的句柄,不能得到上面的edit的句柄。<br>再请[xiaopei]指教
 
使用下面这个程序可以获得其他窗体上的Tedit控件并清空它的值<br><br>unit Unit1;<br>interface<br>uses<br>&nbsp; Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,<br>&nbsp; Dialogs, StdCtrls;<br><br>type<br>&nbsp; TForm1 = class(TForm)<br>&nbsp; &nbsp; Button1: TButton;<br>&nbsp; &nbsp; ListBox1: TListBox;<br>&nbsp; &nbsp; Button2: TButton;<br>&nbsp; &nbsp; ListBox2: TListBox;<br>&nbsp; &nbsp; Label1: TLabel;<br>&nbsp; &nbsp; Label2: TLabel;<br>&nbsp; &nbsp; procedure Button1Click(Sender: TObject);<br>&nbsp; &nbsp; procedure Button2Click(Sender: TObject);<br>&nbsp; &nbsp; procedure ListBox1Click(Sender: TObject);<br>&nbsp; private<br>&nbsp; &nbsp; { Private declarations }<br>&nbsp; public<br>&nbsp; &nbsp; { Public declarations }<br>&nbsp; end;<br><br>var<br>&nbsp; Form1: TForm1;<br>&nbsp; function EnumWindowsProc( Hwnd: HWND; &nbsp;MyForm: TForm1): Boolean; stdcall; //回调函数<br>&nbsp; function EnumChildControlProc( Hwnd: HWND; MyForm: TForm1): Boolean; stdcall; //回调函数, 处理返回来的窗体控件的句柄<br><br>implementation<br><br>{$R *.dfm}<br><br>function EnumWindowsProc( Hwnd: HWND; &nbsp;MyForm: TForm1): Boolean; stdcall;<br>var<br>&nbsp; WndWindowText: array[0..254] of char; //用来存储窗口名<br>begin<br>&nbsp; GetWindowText(Hwnd,WndWindowText,254);<br>&nbsp; MyForm.ListBox1.Items.Add('窗口名: '+StrPas(WndWindowText));<br>&nbsp; Result:= True;<br>end;<br><br>function &nbsp;EnumChildControlProc( Hwnd: HWND; MyForm: TForm1): Boolean; stdcall;<br>var<br>&nbsp; ComponentClassName, ComponentText: array[0..254] of char;<br>&nbsp; Buffer:array[0..255]of char;<br>begin<br>&nbsp;GetClassName(Hwnd,ComponentClassName,254);<br>&nbsp; &nbsp;GetWindowText(Hwnd, ComponentText, 254);<br>&nbsp; &nbsp;if StrPas(ComponentClassName)='TEdit' then<br>&nbsp; &nbsp;begin<br>&nbsp; &nbsp; &nbsp; Buffer='';<br>&nbsp; &nbsp; &nbsp; SendMessage(Hwnd,WM_SETTEXT,0,Longint(@Buffer)); //使用 WM_SetText消息设置Tedit的值.<br>&nbsp; &nbsp; &nbsp; <br>&nbsp; &nbsp;end;<br>&nbsp; Result:= True;<br>end;<br><br><br>procedure TForm1.Button1Click(Sender: TObject);<br>begin<br>&nbsp; ListBox1.Items.Clear;<br>&nbsp; EnumWindows(@EnumWindowsProc, Longint(self)); &nbsp; // 注册回调函数入口地址的函数<br>end;<br><br><br>procedure TForm1.Button2Click(Sender: TObject);<br>var<br>&nbsp; Hwn: HWND;<br>begin<br>&nbsp; Form1.ListBox2.Items.Clear;<br>&nbsp; ListBox2.Items.Add('有如下控件名称');<br>&nbsp; Hwn:= FindWindow(nil,PChar(Label2.Caption));<br>&nbsp; if Hwn&lt;&gt;0 then<br>&nbsp; &nbsp; &nbsp;EnumChildWindows(Hwn,@EnumChildControlProc,LongInt(Self))<br>&nbsp; else<br>&nbsp; &nbsp; &nbsp;MessageBox(self.Handle,'没有获得该窗口句柄','提示',0);<br>end;<br><br>procedure TForm1.ListBox1Click(Sender: TObject);<br>begin<br>&nbsp; Label2.Caption:=Copy(ListBox1.Items.Strings[ListBox1.itemIndex],9,Length(ListBox1.Items.Strings[ListBox1.itemIndex]));<br>end;<br><br>end.
 
to zuodan:<br>不用指定是哪个窗体吗?怎样获得指定窗体中的edit控件的句柄啊?代码里有写明吗?我糊涂了,还是不太明白,可否解释啊?<br>如果我是用shellExcute来调用另外的exe文件呢<br>谢了!
 
代码中按下button1将列出所有当前正在运行的程序的句柄,按下button2将获得指定窗口中的TEdit句柄。<br>&nbsp; 既然你可以获得窗口的句柄,那么你可以参照上面代码中button2Click中的内容,你可以把你的窗口的句柄赋给button2click中的Hwn变量就可以啊。
 
我也想知道,还请高人尽快解决啊!
 
如果另外的EXE程序窗口上 有个多个TEdit呢,如何区分,如何向自定的TEdit发送 文本内容?
 
需要你先用SP++ 看下都有哪些东东啊
 
另外的EXE 是自己的,所有 TEdit,TCombobox控件名称自己都知道。但是如何区分 不同的TEdit,TCombobox呢?SPY++只能看到类名,同类的都是一样的。
 
to zuodan:<br>如果另一个exe是vc写的,并不知道源码,上面的编辑框是就是CEdit类,那又怎样做呢?<br>还请赐教。
 
delphi天堂交流群:4654765
 
你只要将EnumChildControlProc中的<br>&nbsp; if StrPas(ComponentClassName)='TEdit' then<br>改为 if StrPas(ComponentClassName)='Edit' then 既可。
 
外部 EXE程序窗口上,有个3个Name分别是EdtName,EdtTel,EdtAddress 的TEdit,如何在自己的EXE里,向外部EXE程序窗口指定的TEdit 发送文字呢?比如要发生文字到 EdtTel中
 
找到EDIT句柄后通过消息就可以清罗。<br>或发个按键过去也行啊。这个用API就行了。
 
多人接受答案了。
 
后退
顶部