我在form上面放了好几个tabsheet然后我动态创建button和Label控件,为什么我遍历form的所有子控件(包括孙控件及其后代)时候依然可以能够得到他们呢?我动态创建的时候已经指明
Lbl:=TLabel.Create(Self);
Lbl.Parent:=Self;
1.这个components到底是怎么定义的?我都给搞糊涂了,,
2.另外,请高手指教:我要做个多页面窗体,每个页面上都有很多数据将要显示,并且不断更新,我要怎么做才比较合理呢?使用什么控件还是调用form的textout?如果是用控件的话,怎么才能让别人遍历我form的后代components时候不容易获取我的数据呢?
小弟就遇到一个软件,让我无法获取其页面上看似是用Label显示的数据,我现在想不明白对方是怎么实现的??不要告诉我是用Label来显示了,因为在某个高手的指点下,我已经可以获取目标进程中的Label

解决方案 »

  1.   

    净担心没用的,想获取你窗体上的文字,根本就用不着注入进程后费劲去找你的vcl控件,直接拦几个gdi的api就够了
      

  2.   

    回复Seamour:
    能详细的说说吗?老大,我有想过API HOOK,但是具体怎么做呢?你有相关的例子和代码给我参考下吗?
    谢谢
      

  3.   

    Lbl:=TLabel.Create(Self); 
    Lbl.Parent:=Self; 
    这时的self是form,LB1当然算是form的components了1.这个components到底是怎么定义的?我都给搞糊涂了
    不知道我是否理解你的要求:想让位于tabsheet的控件仅仅属于tabsheet而不是属于form?
    可以在一个frame里放这些控件,再让frame位于tabsheet。。2、delphi的通用实现,想反截取比较困难吧
    针对label,可以在一个内部不可见的bmp里画label的内容,然后把此bmp画面复制到界面
    可能只防止被按components取到,真正的高手要截取,也是能取走的
      

  4.   

    TComponent用了一个List来管理Component, 下边FComponents的count就是TComponentCountprocedure TComponent.Insert(AComponent: TComponent);
    begin
      if FComponents = nil then FComponents := TList.Create;
      FComponents.Add(AComponent);
      AComponent.FOwner := Self;
    end;
    property ComponentCount: Integer read GetComponentCount;function TComponent.GetComponentCount: Integer;
    begin
      if FComponents <> nil then
        Result := FComponents.Count else
        Result := 0;
    end;
    看了这几段代码,楼主该明白了吧
      

  5.   

    第二个问题,伴水早不久都写了代码
    你参考下 
    http://topic.csdn.net/u/20090314/14/fe341a25-d1f5-40c0-b012-44f581df8395.html
      

  6.   

    谢谢楼上的几位前辈!!!
    对于第一个问题,我是搞明白了
    可是第二个问题,zsWang是给我写过个代码,按照他遍历的思路,理论上窗体上所有的控件都可以枚举到的,但是我现在面临的问题是:想获取我电脑里面那个界面上的数据就是不可行,我想知道有哪些方法可以使我按遍历的思路遍历不到对方的组件???
    谢谢!!
      

  7.   

    我说的自己画label的方法,肯定是无法按componets的方法取得这个“label控件”的。因为它其实并不是控件