如何向其他进程中的两个以上EDIT输入框发送字符串。 ( 积分: 200 )

  • 主题发起人 主题发起人 ic
  • 开始时间 开始时间
I

ic

Unregistered / Unconfirmed
GUEST, unregistred user!
我只发送其中一个EDIT成功。其中一个得不到其EDIT 句柄。
 
我只发送其中一个EDIT成功。其中一个得不到其EDIT 句柄。
 
另外一个是否是Edit呢?用spy看了么?
 
是EDIT,由于两个都是EDIT我不知如何分辩其中一个.
 
你可以先遍历里面所有的控件
取得所有的edit的句柄
 
有个函数列举父窗口的所有Child的,

以下抄自网络

既然能用FindWindow获得第一个,就能用SetWindowText改变已获得的句柄
的窗口标题为一个临时字串,再找下一个,全部取得再改回来!

可以用FindWindowEx函数查找,第一次找到第一个窗口,第二次把第一次找到的句柄作为
参数,可以找到下一个相同的窗口句柄
 
你试试看:
var cnt:integer;

function GetEditHandle(HWND: Integer; lparam: Longint): BooLean; stdcall;
var
buffer: array[0..255] of Char;
buffer1: array[0..255] of Char;
i:integer;
begin
i:=0;
Result := True;
//得到目标窗口的控件
GetClassName(HWND, buffer, 256);
//找到发消息的目标窗口的目标控件
if StrPas(buffer) = 'EDIT' then
begin
inc(i);
if i=cnt then
begin
GetWindowText(HWND, buffer1, 100);
PInteger(lparam)^ := HWND; //得到目标控件的Hwnd(句柄)
Result := False; //终止循环
end;
end;
end; //end of function

procedure TForm1.Button3Click(Sender: TObject);
var TxtHandle: Integer;
begin
cnt:=1; //第一个edit
TxtHandle := 0;
//取消息输入框的,FTextHandle
EnumChildWindows(TxtHandle, @GetEditHandle, Integer(@TxtHandle));
FTextHandle := TxtHandle;
SendMessage(FTextHandle, WM_SETTEXT, 0, Integer(pchar(Memo2.Text)));

cnt:=2; //第二个edit
EnumChildWindows(TxtHandle, @GetEditHandle, Integer(@TxtHandle));
FTextHandle := TxtHandle;
SendMessage(FTextHandle, WM_SETTEXT, 0, Integer(pchar(Memo2.Text)));

end;
 
能找到第一个了其他应该没有问题。用楼上的代码找找看。然后记下分别找到第几个是自己需要的,然后记下序号,下次对应SendMessage
 
procedure TForm1.Button1Click(Sender: TObject);
var
ParentHandle , ChindHanlde : THandle;
I : Integer;
begin
ParentHandle := FindWindow(nil, PChar('Form1'));// [blue]另外一个程序的标题,我在那个程序里面放了10个Edit框[/blue]
I := 0;
if ParentHandle <> 0 then begin
// 先找到第一个控件
ChindHanlde := FindWindowEx(ParentHandle, 0, PChar('TEdit'), nil);
// 循环找
while ChindHanlde <> 0 do begin
SendMessage(ChindHanlde, WM_SETTEXT, 0, Integer(pchar(IntToStr(I))));// [blue]设置内容,好像这里的Integer也比较重要[/blue]
ChindHanlde := FindWindowEx(ParentHandle, ChindHanlde, PChar('TEdit'), nil);// [blue]寻找下一个Edit,注意FindWindowEx的地二个参数,是ChindHandle[/blue]
Inc(I);
end;
end;
end;
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
915
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
后退
顶部