我想写一个控制另一个软件的程序,能枚举窗体中的所有控件,combobox不知道如何依次选择,还有不知道为什么有的控件能枚举到,但是用查找子窗体函数查就查不到.有没有能准确查到控件的方法

解决方案 »

  1.   


    function EnumChildWndProc(hWnd:LongInt;  lParam:lParam): Boolean;stdcall;
    var
      ClassName: array[0..254] of Char;
      Caption: array[0..254] of Char;
    begin
      GetClassName(hWnd, ClassName,254);
      GetWindowText(Hwnd, Caption,254);  Result:=true;
    end;
    procedure TForm1.Button1Click(Sender: TObject);
    var
      H: Hwnd;
    begin
      H := FindWindow(nil, '窗口名');
      if H <> 0 then
        EnumChildWindows(H, @EnumChildWndProc, 0);end;
      

  2.   

    上面的方法,我知道还没试验,现在主要想知道,如保控制combobox选项依次选择,能不能给段代码学习一下
      

  3.   

    我在学习API时,也遇到过类似的问题。记得有一次,也是打算控制一个combobox,让它显示第三个选项,结果搞了好久都没出结果。当时是用每一项的字符名称去弄的,用sendmessage,可以这招对有的程序行,有些就不行。楼主不妨试一下postmessage,很多时候sendmessage搞不定的东东,用postmessage就可以实现
      

  4.   

    我的问题是:如何控制另一窗体中的combobox,使combobox的选项依次选择,找到控件了要怎么办才能使combobox的选项依次选择
      

  5.   

    一楼的方法,是通过发消息来设置值,但是如果楼主好像是想得到此TCOMBOBOX的控件,控制控件进行操作。
    这个通过句柄找到控件的方法,我也正在想用。楼主可以试下FindControl(HWND),这是通过句柄找到控件的方法,但是只能是在同一个线程中使用。
      

  6.   

    这个不会用啊,我要控制其它程序里的两个联动TCOMBOBOX,第一个选了第二个值就会变,我用sendmessage(Hwnd3,CB_SETCURSEL,1,0);只是改变了值,没有联动效果了