已知某一个进程句柄,如何遍历得到此进程内所有窗体?(100分)

  • 主题发起人 主题发起人 yansea
  • 开始时间 开始时间
Y

yansea

Unregistered / Unconfirmed
GUEST, unregistred user!
如题。谢谢。
 
就是得到所有窗体的handle呀~~或者说,在已知进程handle的情况下如何得到子窗体的handle……
 
首先窗体的handle不是进程的handle,因为有的进程没有窗体.
如果你有窗体handle,那么用getWindow的各种参数就能得到所有子窗体和
子窗体的子窗体等等,做个小递归就行了,但要注意防止死循环。
详见msdn200110月版,delphi的api helper不全。
 
有意思! 学习!
 
我不知还会不会有更好的办法,我的办法如下:
用EnumWindows枚举系统内的所有Window,然后用GetWindowThreadProcessId取得创建此窗
口的进程ID,跟自己已知的作比较,如果相同则进行下一步
用EnumChildWindows可取得某一窗体下的子窗口,如果你只要进程的Window则不必用此步。
 
EnumChildWindows需要回调用起来有点麻烦,但安全性高。
另外GetWindowThreadProcessId得到的进程ID与你拥有的进程ID有不一致的情况,
特别是分别在两个进程的时候。要用DuplicateHandle重置一下,试试再说吧。
 
各位思路不错,给我很大启发,让我试试先!
谢谢各位!
 
可用EnumChildWindows枚举每一个窗体,同时获取其handle。
 
多人接受答案了。
 
后退
顶部