我想用DELPHI实现找出其它应用程序当前活动窗体中所用的文本框名字,并且给这些文本框填上值,这知怎么实现,请大家指教,如有详细代码请给出,在下出300分,决不失言。

解决方案 »

  1.   

    var
      H:HWND;
      str : array[0..127] of char;
      i : integer;
    begin
      H:=FindWindow(nil,'test'); //查找目标窗口
      H:=FindWindowEx(H,0,'TEdit',nil);// 查找目标控件
      if H<>0 then
      begin
        i := sendmessage(H,WM_GETTEXTLENGTH,0,0);
        sendmessage(H,WM_GetText,i+1,integer(@str));
        edit1.Text := str;
      end;
    end;
      

  2.   

    楼上的朋友说的不能实现我所说的功能,请详细说明一下可以吗,比如当前有一个财务软件
    有一个活动窗口,我想得到它上面所有的控件名称并把一些文本框内容输上出,记住不是当前运行的DELPHI程序而是其它软件编的程序的窗体,只是用DELPHI编的程序去实现填充其它程序的内容.
      

  3.   

    也不是很难
    给你思路
    1. 用SPY++之类的工具查看你的目标控件的类型 比如为 CEdit
    2. 然后使用FindWindow/ FindWindowEx API函数进行查询 获得目标控件的句柄 
    比如代码
    h1 = ::FindWindow(NULL, "ShowAllProcess"); // 找到当前活动主窗口
    h2 = ::FindWindowEx(h1, NULL,  "Edit", NULL);
      if ( h2 <> NULL)
      {
         ::SendMessage(h2, WM_SETTEXT, 255, (LPARAM)"AAAA");
      }
    // 上面代码为VC代码 经测试可以运行 DELPHI也差不多。。如有问题 请再提出
      

  4.   

    用GetFocus得到的就是拥有输入焦点的句柄了。你可以先用FINDWINDOW(NIL,你想操作的窗口标题)得到句柄与GetActiveWindow得到的句柄比较,如果相等,那么说明你想操作的窗口处于激活状态。这时再GetFocus得到有输入焦点的控件的句柄。然后就可以用KEYBD-EVENT对这个控件进行操作了。
      

  5.   

    好象楼上说的没有通用性吧!!!如果用DELPHI写的可能可以,但是用VC写的或用VB写的,难说!!
      

  6.   

    GetFocus可以说是通用性最好的了。不过窗体不一定在激活的时候输入框就有焦点。所以想要在输入框没有焦点时来操作它,必须遍历子窗口,也就是窗口中的控件类名,来判断是否是输入框。
    输入框类名VC的是EDIT,DELPHI的是TEDIT,VB的是ThunderRT6TextBox
      

  7.   

    回复人: indexhome(蓝 海) ( ) 信誉:99  2004-08-31 22:18:00  得分: 0  
     
     
       好象楼上说的没有通用性吧!!!如果用DELPHI写的可能可以,但是用VC写的或用VB写的,难说!!
      
     
    呵呵 其实都是通过相同的API进行获取的 其他的 只是一些基本语法不同而已 我只是懒得写DELPHI代码  其中的思路 都一样....