请问如何取得已知进程下所有窗口的句柄? ( 积分: 100 )

W

wyqxp

Unregistered / Unconfirmed
GUEST, unregistred user!
比如,我的程序名字叫 aaa.exe 假设运行后的进程ID是1800,在我的aaa.exe 里打开的所有窗口的进程ID都是1800 我想知道在每个窗口上的控件句柄,和控件大小,控件位置.
有个叫小雨哥的,给我解答一些,我光顾着给分了,变成已答问题了,从新问
先谢谢小雨哥
希望大家继续给帮助,给分啊
 
Y

ysai

Unregistered / Unconfirmed
GUEST, unregistred user!
给你我的小工具里的一段代码参考
function EnumThreadProc(AHandle:HWND;
lParam:LPARAM): Boolean;
stdcall;
procedure GetWindowInfo(
const AHandle : HWND;
const AList : TStrings
);
var
szText : array[0..MAXBYTE] of char;
begin
AList.Add(IntToStr(AHandle));
GetWindowText(AHandle, szText, MAXBYTE);
AList.Add(StrPas(szText));
GetClassName(AHandle, szText, MAXBYTE);
AList.Add(StrPas(szText));
end;

begin
GetWindowInfo(AHandle, TStrings(Pointer(lParam)));
Result:=True;
end;

procedure TProcessInfo.EnumWindows(const AList: TStrings);
var
snap : THandle;
ThreadStruct: TThreadEntry32;
begin
if FHandle = 0 then
Exit;
snap := CreateToolHelp32Snapshot(TH32CS_SNAPTHREAD, FHandle);
if snap <> 0 then
try
ThreadStruct.dwSize := sizeOf(TThreadEntry32);
if Thread32First(snap, ThreadStruct) then
repeat
if ThreadStruct.th32OwnerProcessID = FHandle then
EnumThreadWindows(ThreadStruct.th32ThreadID, @EnumThreadProc, Integer(AList));
until not Thread32Next(snap, ThreadStruct);
finally
CloseHandle(snap);
end;
end;
 

Similar threads

S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
顶部