2012-09-03 235 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