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