又没有办法枚举一个dll中窗体的控件列表、
这个dll包含一个窗体,导出函数我也知道。
但是只能知道这个函数,调用此函数,dll中
的窗体便show出来了,此dll也是delphi所写。
请问哪位知道怎么才能枚举?应该能枚举的,我手头有一个无源的程序,调用此
dll后,就能把这个dll窗体中的button全部枚举出来
包括这些button的名称,caption等。
这个dll包含一个窗体,导出函数我也知道。
但是只能知道这个函数,调用此函数,dll中
的窗体便show出来了,此dll也是delphi所写。
请问哪位知道怎么才能枚举?应该能枚举的,我手头有一个无源的程序,调用此
dll后,就能把这个dll窗体中的button全部枚举出来
包括这些button的名称,caption等。
begin
ShowMessage(Form1.Components[i].Name);
end;
(其实就是hInstance不同造成的)
用LoadResource把dfm信息读出来就可以了
Left = 192
Top = 114
Width = 574
Height = 392
Caption = 'Form1'
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
OldCreateOrder = False
PixelsPerInch = 96
TextHeight = 13 object Button1: TButton
Left = 160
Top = 96
Width = 75
Height = 25
Caption = 'Button1'
TabOrder = 0
end object Memo1: TMemo
Left = 64
Top = 160
Width = 185
Height = 89
Lines.Strings = (
'this is a sample')
TabOrder = 1
end
end
动态生成的窗口和直接通过api生成的窗口不能通过这个方法。
EnumChildWindows(Hwnd, @buildFormInfo, 0);
Hwnd是要遍历的窗口句柄。function buildFormInfo(AhWnd: HWND; AlParam: lParam): boolean; stdcall;
var bufClassName: array[0..255] of Char;
findClassName: string;
begin
GetClassName(AhWnd, bufClassName, 255);
findClassName := StrPas(bufClassName);
showmessage('控件句柄:::' + inttostr(AhWnd) + ':::类名:::' + findClassName );
Result := True;
end;