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

来源:互联网  时间:2016/8/26 5:45:51

关于网友提出的“ 已知窗体句柄,如何根据它获得窗体内所有控件的名称及其句柄?”问题疑问,本网通过在网上对“ 已知窗体句柄,如何根据它获得窗体内所有控件的名称及其句柄?”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:

问题: 已知窗体句柄,如何根据它获得窗体内所有控件的名称及其句柄?
描述:

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


解决方案1:

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

解决方案2:

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;

解决方案3:


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

上一篇dll的参数可以是ADO对象吗?
下一篇DLL中的无模式窗体问题
明星图片
相关文章
《 已知窗体句柄,如何根据它获得窗体内所有控件的名称及其句柄?》由码蚁之家搜集整理于网络,
联系邮箱:mxgf168#qq.com(#改为@)