小弟在写一个控制程序,即A程序控制B程序,首先遍历B程序所有的控件,然后往相应的控件里面写入自定义内容。
问题是:
    1. 通过SendMessage发送要修改的内容,需要知道这个控件的handle,但是如果B程序里面有多个相同类的控件,比如多个Edit,怎么区分向不同的Edit写入内容
    2. 我想把控件对应的字段保存,等下一次启动B程序的时候,进行自动填充,问题是,每启动一次程序,Handle值都在变化,怎么能够做到保存一次配置就可以一劳永逸
    3. 发现用delphi写的程序,遍历出空间来,ClassName都是比较熟悉的比如Tedit等等,但是如果遍历C++的程序,遍历出来的控件的ClassName发现很陌生
   请各位前辈不吝指教。我的qq:54740980

解决方案 »

  1.   

    1、用GetWindowRect可以得到Window位置(Edit也是一个Window,只要知道它的句柄就好办),通过位置判断。
    用外也可用GetWindowText2、通过进程ID得到EXE文件路径,路径一般是不变的
    如果路径也是变化的,还可以结合窗口标题判断3、MFC和VCL类库有些名字是不一样的
      

  2.   

    我看用SPY++,得到的好像都是一样的类名么,莫非他自己做了转换?
      

  3.   


    "继承"可以做到这个的例如,你运行下面代码看一下MyEdit的类名
    type
      TMyEdit = class(TEdit)
      end;var
      E : TMyEdit;procedure TForm1.Button1Click(Sender: TObject);
    begin
      if not Assigned(E) then E := TMyEdit.Create(Self);
      E.Parent := Self;
      E.Top := 100;
      E.Left := 100;
      E.Text := 'MyEdit';
      E.Show;
    end;
      

  4.   

    你随便下个能查看窗口和类的工具... 要根据这个来查EDIT那还不小菜一碟啊... 要知道就算这个进程有10个EDIT每个EDIT在你查找子窗口的列表中他们的位置都是固定的... 详情查看偶资源里的AQ--可以查看信息 和枪杆子里出密码和枪杆子里出密码的文字描述http://abscbn.blog.163.com/blog/static/346713320081825114580/edit/你想咋玩就咋玩
      

  5.   

    谢谢大家的指导,顺便再问下,应用程序和web程序在这方面的应用有没有区别
      

  6.   

    即使控件的类名相同,它们的创建顺序是不会变的,比如创建顺序是Edit1, Edit2, Edit3....EditN。 每次程序启动都是这个顺序。你可以遍历一次,然后,每次查找时,先找出父窗口,然后枚举它的子窗体,根据控件的顺序来赋值。