已知窗体句柄,(如getactivewindow)
如何根据它获得窗体内所有控件的(如文本框)名称及其句柄?

解决方案 »

  1.   


    BOOL EnumWindows(          WNDENUMPROC lpEnumFunc,
        LPARAM lParam
    );
    試下
      

  2.   

    我可以取得特定窗体下控件的句柄,用EnumChildWindows
    不知能不能根据句柄取出控件名字(不是类名)
      

  3.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
    h: HWND;
    begin
    h:=FindWindow(nil, PChar(Edit1.Text));
    if h <> 0 then
    begin
    EnumChildWindows(h, @EnumChildProc, 0);
    end;
    end;function EnumChildProc(h: hwnd; a: integer): Boolean; stdcall;
    var
    str: Array[0..1024] of Char;
    begin
    Result := true;
    if h <> 0 then
    begin
    GetClassName(h, str, 1024);
    Form1.Memo1.Lines.Add('classname='+str);
    SendMessage(h, WM_GETTEXT, 1024, integer(@str[0]));
    Form1.Memo1.Lines.Add('gettext='+str);
    Form1.Memo1.Lines.Add('');
    end;
    end;
      

  4.   

    你得到的是Form类,而不是句柄,句柄是self.handle,累,VC中最基本概念。即然知道类实例,可以谳用 pForm->忘了,试一下就知道了。两个函数,可以得到内含控件数总和,另一个可以通过index参数得到相应控件实例指针。没空试,自己试吧,不能再详细了。