知道一个另一个程序的窗口handle,怎么枚举起edit控件,改变edit的text
procedure TForm1.Button1Click(Sender: TObject);
var
  i:integer;
  handle1: HWND;begin  handle1 := FindWindow(nil, 'test');
  test窗体有个edit,怎么改变他的text

解决方案 »

  1.   

    function EnumChildProc(hwnd: HWND; lParam: LPARAM): BOOL; stdcall;
    var
      vBuffer: array[0..255] of Char;
    begin
      GetClassName(hwnd, vBuffer, 255);
      if SameText(vBuffer, 'TEdit') or SameText(vBuffer, 'Edit') then begin
        SendMessage(hwnd, WM_SETTEXT, 0, lParam);
      end;
      Result := True;
    end;procedure TForm1.Button1Click(Sender: TObject);
    var
      I: Integer;
      vHandle: THandle;
    begin
      vHandle := FindWindow(nil, 'test');
      EnumChildWindows(vHandle, @EnumChildProc, Integer(PChar('测试看看')));
    end;
      

  2.   

    谢谢zswang(伴水)(现在是专家门诊清洁工)!!!
    很佩服你!!!!
      

  3.   

    to  zswang(伴水)(现在是专家门诊清洁工)!!!在请问一个问题。就是只改变text窗体特定的edit的text,怎么实现!
    谢谢!!
      

  4.   

    //这目前也没有什么好的办法~~
    //用一个记数器~~var
      vCount: Integer;function EnumChildProc(hwnd: HWND; lParam: LPARAM): BOOL; stdcall;
    var
      vBuffer: array[0..255] of Char;
    begin
      GetClassName(hwnd, vBuffer, 255);
      if SameText(vBuffer, 'TEdit') or SameText(vBuffer, 'Edit') then begin
        Inc(vCount);
        if vCount = lParam then
          SendMessage(hwnd, WM_SETTEXT, 0, Integer(PChar(IntToStr(vCount))));
      end;
      Result := True;
    end;procedure TForm1.Button1Click(Sender: TObject);
    var
      vHandle: THandle;
    begin
      vHandle := FindWindow(nil, 'test');
      vCount := 0;
      EnumChildWindows(vHandle, @EnumChildProc, 3);
    end;