我正在尝试使用 delphi 编程访问第三方应用程序的“文本框”,因此我需要使用 FindWindowEx(...) 函数找到每个“文本框”的句柄。

问题是,由于所有文本框都具有相同的类名和“无窗口名称”,这个函数只能给我第一个 TextBOx 句柄!

我怎样才能在没有名称的情况下获得其余的文本框句柄?

提前致谢。

最佳答案

可以使用EnumChildWindows枚举第三方应用程序窗口的所有子窗口,并测试每个枚举窗口的类名,看是否是“文本框”类。例子:

function EnumChildren(hwnd: HWND; lParam: LPARAM): BOOL; stdcall;
const
  TextBoxClass = 'EDIT'; (?)
var
  ClassName: array[0..259] of Char;
begin
  Result := True;
  GetClassName(hwnd, ClassName, Length(ClassName));
  if ClassName = TextBoxClass then
    TStrings(lParam).Add(IntToHex(hwnd, 8));
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Memo1.Clear;
  EnumChildWindows(OtherAppWnd, @EnumChildren, UINT_PTR(Memo1.Lines));
end;

关于delphi - 如何获取具有相同类名的不同控件的句柄?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10655133/

10-15 06:08