您的位置:程序门 -> delphi -> windows sdk/api



如何取得另一程序中多个文本框的句柄和内容


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


如何取得另一程序中多个文本框的句柄和内容
发表于:2008-01-06 23:05:39 楼主
加入一应用程序中有三个文本框(tedit控件),我首先通过findwindow函数找到应用程序窗口句柄hwnd,之后调用  
hedt   :=   findwindowex(hwnd,   hedt,   pchar('tedit'),   nil);
只能得到一个文本框的句柄,这是指哪一个文本框的句柄?如果要分别得到三个文本框的句柄和内容,怎么实现?
如果有代码参考,感激不尽,各位指点指点。
发表于:2008-01-07 08:30:251楼 得分:0
每个控件的control   id不一样的呀
发表于:2008-01-07 09:15:112楼 得分:0
procedure   tform1.button1click(sender:   tobject);
var
  h,c:hwnd;
  cap:array[0..100]   of   char;
begin
h:=findwindow(0,'有三个或多个edit的窗口标题');
if   h=0   then   exit;
//注意原窗口的控件类名是tedit还是edit?这里以tedit来说明问题:
c:=findwindowex(h,0,'tedit',0);
while   c <> 0   do
begin
//showmessage('句柄:'+inttostr(c));
getwindowtext(c,cap,99);
showmessage(cap);//显示当前tedit里面的数据。
c:=findwindowex(h,0,'tedit',0);//查找下一个
end;
发表于:2008-01-07 23:09:373楼 得分:0
死循环。。。
发表于:2008-01-08 15:26:394楼 得分:0
写错了一点点,重写:

procedure       tform1.button1click(sender:       tobject);  
var  
    h,c:hwnd;  
    cap:array[0..100]       of       char;  
begin  
h:=findwindow(0,'有三个或多个edit的窗口标题');  
if       h=0       then       exit;  
//注意原窗口的控件类名是tedit还是edit?这里以tedit来说明问题:  
c:=findwindowex(h,0,'tedit',0);  
while       c   <>   0       do  
begin  
//showmessage('句柄:'+inttostr(c));  
getwindowtext(c,cap,99);  
showmessage(cap);//显示当前tedit里面的数据。  
c:=findwindowex(h,c,'tedit',0);//查找下一个  
end;
发表于:2008-01-08 18:16:095楼 得分:0
如一个程序窗口上有4个edit类控件
var
hedit1,hedit2,hedit3,hedit4:hwnd;//全局变量

function   enumchildwindowsproc(hchild:   hwnd):   boolean;   stdcall;//回调函数
var
    szclassname:   array[0..255]   of   char;
begin
    result   :=   true;   //设定为true才会再找下一个
    getclassname(hchild,   szclassname,   255);
    if   strpas(szclassname)='edit'   then   //'edit'是其类名
    begin
        inc(numedit);
        case   numedit   of
        1:hedit1:=   hchild;   //存盘文件名
          2:hedit2:=   hchild;   //板卡状态
          3:hedit3:=   hchild;   //已运行时间
          4:hedit4:=   hchild;   //当前文件名
          end;//end   case
    end;//end   if
end;

//下面是调用方法
h_window:=findwindow('#32770','');
if   (h_window <> 0)   then   enumchildwindows(h_window,   @enumchildwindowsproc,   0);//列举控件
发表于:2008-01-08 18:18:096楼 得分:0
补充:numedit:integer;(全局变量)     每次调用enumchildwindows(h_window,       @enumchildwindowsproc,       0);之前置为0
发表于:2008-01-08 18:20:357楼 得分:0
对了,因为是从我以前的程序拷出来修改的,注释不一定正确,程序基本正确,时间匆忙,不多说了,自己用google搜索相关资料,相信你可以搞定


快速检索

最新资讯
热门点击