2012-09-03 209 views
0

我有一个Internet Explorer页面,它产生了一个弹出窗口。我可以从弹出窗口的句柄获取父:win32:孩子的父母的孩子找不到子窗口

>>> child.handle 
15208472 
>>> win32gui.GetParent(child.handle) 
33230502 

但我不能用EnumChildWindows发现孩子的手柄:

>>> win32gui.EnumChildWindows(win32gui.GetParent(child.handle), lambda hwnd,p: child_handles.append(hwnd), None) 
>>> len(child_handles) 
39 
>>> child.handle in child_handles 
False 

我做这个递归以及(获得所有孩子的孩子),仍然没有孩子处理被发现。为什么会出现这种情况?

回答

2

弹出式窗口不是子窗口,因此不能用EnumChildWindows枚举。

当您调用win32gui.GetParent时,实际上您已获得弹出窗口的“所有者”窗口,但“所有者”和“父”是两个不同的东西。有关更多信息,请参阅MSDN entry

+0

啊gotcha。那么我如何获得一个窗口的所有窗口?是唯一的方法来枚举所有的窗口,并返回那些父母是特定的,不在父母的子窗口中的父母? (看起来像一个很长的路要做) – Claudiu

+0

您可以使用EnumWindows函数并将每个窗口的所有者与目标窗口进行比较。如果窗口在同一个线程中,那么以相同的方式使用EnumThreadWindows可能会更有效。 –

+0

我如何获得窗户的主人? – Claudiu