如:现在运行一个程序,主窗体标题名为“abc",如何取得“abc“上的edit的句柄。
最好贴上原码,不胜感激。

解决方案 »

  1.   

    取得窗口中带有句柄的控件
    var
      hMain,hChild:HWND;
      buffer:array[1..200] of char;
    begin
     hMain:=FindWindow(nil,'Form1');
     hChild:=FindWindowEx(hMain,0,nil,nil);
     while hChild>0 do
       begin
         GetWIndowText(hChild,@buffer,200);
         ListBox1.Items.Add(StrPas(@Buffer));
         hChild:=FindWindowEx(hMain,hChild,nil,nil);
       end;
    end;还可以用 EnumChildWindows 得到有句柄的控件
      

  2.   

    只获得Editvar
      hMain:HWND;
      hChild:HWND;
      buffer:array[0..255] of char;
    begin
     hMain:=FindWindow(nil,'Form1');
     hChild:=FindWindowEx(hMain,0,nil,nil);
     while hChild>0 do
       begin
        GetClassName(hChild, buffer, 256);
          if StrPas(Buffer) = 'TEdit' then        //子窗体类名为TEdit
             ListBox1.Items.Add(StrPas(@Buffer));
        hChild:=FindWindowEx(hMain,hChild,nil,nil);
       end;
    end;
      

  3.   

    除了鸟兄的办法,还有一种:
    用ChildWindowFromPointEx也可以得到!
    hParent是窗体句柄
    Point(x, y) 是控件的大约位置
    CWP_ALL表示所有控件,也可以制定只取某类控件
    函数返回值为控件句柄。
    ChildWindowFromPointEx(hParent, Point(x, y) , CWP_ALL);下面是一个获取别的程序edit的内容的例子
    procedure TForm1.Button1Click(Sender: TObject);
    var
      hParent, hEdit: HWND;
      u: pchar;
    begin
      try
        hParent := FindWindow(nil, 'fromB的标题');
        if hParent = 0 then
          showmessage('窗口没有找到!')
        else
        begin
          hEdit := ChildWindowFromPointEx(hParent, Point(10, 10) //大约位置
            , CWP_ALL);
          if hEdit = 0 then
            showmessage('Edit没有找到!')
          else
          begin//找到控件
             {
              添加你自己的处理代码   
              }
          end;
        end;
      except
      end;
    end;