关于网友提出的“ delphi FindWindow如何才可以获取窗体中所有控件的句柄”问题疑问,本网通过在网上对“ delphi FindWindow如何才可以获取窗体中所有控件的句柄”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题: delphi FindWindow如何才可以获取窗体中所有控件的句柄描述:
我有一个应用程序他在进程中的名称为:main.exe
我通过API的函数取得了 main.exe的句柄
main.exe的窗体中有好多个控件。现在的问题是我如何才可以通过一个类似循环的方式来
取得所有控件的句柄。如果不使用循环的方式FindWindowEx只能找到第一个控件的句柄。
我的代码如下:
procedure TForm1.Button1Click(Sender: TObject);
var
ProcessName:string;//进程名
FSnapshotHandle:THandle;//进程快照句柄
FProcessEntry32:TProcessEntry32;//进程入口的结构体信息
ContinueLoop:BOOL;
myHwnd:THandle;
myHwnd2:THandle;
hd:THandle;
arr: array[0..255] of Char;
Buf: array[0..1024] of Char;
begin
FSnapshotHandle:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
FProcessEntry32.dwSize:=Sizeof(FProcessEntry32);
ContinueLoop:=Process32First(FSnapshotHandle,FProcessEntry32);
while ContinueLoop do
begin
ProcessName:=FProcessEntry32.szExeFile;
if(ProcessName='Main.exe') then
begin
myHwnd:=GetHWndByPID(FProcessEntry32.th32ProcessID); //应用程序句柄
end;
ContinueLoop:=Process32Next(FSnapshotHandle,FProcessEntry32);
end;
CloseHandle(FSnapshotHandle);//释放快照句柄
myHwnd2:=FindWindowEx(myHwnd,0,nil,nil); //查找应用程序中的控件句柄
SendMessage(myHwnd2,WM_GETTEXT,255,Longint(@arr)); //取得控件标题
GetClassName(myHwnd2,Buf, 1024); // 得到类名
Label4.Caption:=IntTostr(myHwnd2)+arr+Buf;
//这样只是得到了第一个控件的值和类名,可是我怎麽才能行到第二个,第三个.....第N个控件的句柄呢
end;