var
H,hmdi,hc,hcg: HWND;
begin
h := FindWindow('Tfm_Main',nil);
hmdi:= FindWindowEx(h,0,'MDIClient',nil);
hc:= FindWindowEx(hmdi,0,'Tfm_BillJHD','进货单');
hcg:=FindWindowEx(hc,0,'TcxGrid',nil);
照理说Hcg是这个控件的句柄了,但是返回0,但是Tedit,Trzpanel等可以正常读取到并且sendmessage。请问:
Tlabel,Tcxgrid这些是0的该如何操作他们

解决方案 »

  1.   

    只能确定他们在列表中的位置,不用类名来查找
    hcg:=FindWindowEx(hcg,0,nil,nil);
    hcg:=FindWindowEx(hcg,0,nil,nil);
    hcg:=FindWindowEx(hcg,0,nil,nil);
    ... 固定个数的这样的查找
      

  2.   

    有什么方法可以快速看到类名的位置并且find吗?
      

  3.   

    一步步的跟踪  H,hmdi,hc,hcg 看看是不是到了Hcg才是0发个EXE 过来,我试下
      

  4.   

    TLabel继承自TGraphicControl,是没有句柄的。不管你用是FindWindowEx还是EnumChildWindows,都找不到这个控件的。
      

  5.   

    如果是本进程中的其他窗体,可以通过"窗体名.Components"和"窗体名.ComponentCount"来遍历窗体上每一个组件。如果是其他进程中的窗体,恐怕只有注入该进程了。
      

  6.   

    这里是伴水清洁工老大以前的一个分享,你可以研究下,呵呵
    http://download.csdn.net/source/1107748
      

  7.   

    小程序的话,传到csdn上,大程序就免了,你自己研究下!
      

  8.   

    這個要看是否異同進程:如果本進程,直接用Tform.Components和Tform.ComponentCount來遍歷組件;與否,只能注入進程才可...
      

  9.   

    想想看,如果你fm_BillJHD里有多个cxGrid,假如hcg:=FindWindowEx(hc,0,'TcxGrid',nil);得到的不是0,哪该是哪一个cxGrid的呢?
    所以觉得你不能这样来找cxGrid的句柄
      

  10.   

    解决了。SPY++真TMD的强悍。看了下位置顺序,居然就这么搞定了开心
      

  11.   

    在Delphi版得分可真容易啊. 不解释.