Form 上有三个 TEdit 为何我用这段代码只能得到第三个TEdit的文本?function EnumUserProc(hwnd: Integer; lparam: Longint): Boolean; stdcall;
var
  buffer: array[0..255] of char;
begin
  Result := True;
  GetClassName(hwnd,buffer,256);
  if StrPas(Buffer)='TEdit' then
  begin
    SendMessage(hwnd,WM_GETTEXT,256,lparam);    
    Result:=False;
  end;
end;procedure getuser;
var
  hwnd: Integer;
  buffer: array[0..255] of char;
begin
  hwnd := FindWindow(nil,'test');
  if hwnd<>0 then
    begin
    EnumChildWindows(hwnd,@EnumuserProc,Integer(@buffer[0]));
    mainfrm.Memo1.Lines.Add(buffer);
    end;
end;

解决方案 »

  1.   

    你只能在回调过程中取得文本,因为回调过程是被系统调用的,而delphi不知道它将被调用几次.
    function EnumUserProc(hwnd: Integer; lparam: Longint): Boolean; stdcall;
    var
      buffer: array[0..255] of char;
    begin
      Result := True;
      GetClassName(hwnd,buffer,256);
      if StrPas(Buffer)='TEdit' then
      begin
        SendMessage(hwnd,WM_GETTEXT,integer(buffer),255);    
        mainfrm.Memo1.Lines.Add(string(buffer));
        Result:=False;
      end;
    end;procedure getuser;
    var
      hwnd: Integer;
    begin
      hwnd := FindWindow(nil,'test');
      if hwnd<>0 then
        EnumChildWindows(hwnd,@EnumuserProc,0);
    end;
      

  2.   

    function EnumUserProc(hwnd: Integer; lparam: Longint): Boolean; stdcall;
    var
      buffer: array[0..255] of char;
    begin
      Result := True;
      GetClassName(hwnd,buffer,256);
      if StrPas(Buffer)='TEdit' then
      begin
        SendMessage(hwnd,WM_GETTEXT,256,lparam);
        mainfrm.Memo1.Lines.Add(PChar(lparam));  // 加上
    //    Result:=False;  // 去掉
      end;
    end;
      

  3.   

    谢谢,放分,其实关键在:Result:=False;呵呵!