2012-05-10 235 views
0

我試圖ge對話框中的「是」按鈕的句柄,所以我可以發送消息來點擊它。Python:無法找到句柄與win32gui.FindWindowEx()

我得到的對話框,然後我試圖找到按鈕,但我總是得到0回來。

import win32gui 

hwnd = win32gui.FindWindow("#32770", "Programs and Features") 
# got back the correct handle to the dialog 

win32gui.SetForegroundWindow(hwnd) 

btnhdl = win32gui.FindWindowEx(hwnd, 0, "Button", "&Yes") 
# returns 0 

按鈕在那裏,類和標題似乎沒問題。我這個驗證它:

def printClasses(childHwnd, lparam): 
    if win32gui.GetWindowText(childHwnd) == "&Yes": 
     print win32gui.GetClassName(childHwnd), win32gui.GetWindowText(childHwnd) 
    return 1 

win32gui.EnumChildWindows(hwnd, printClasses, None) 
# output: Button &Yes 

看起來一切都應該被罰款,但它爲什麼不與FindWindowEx回到手柄?

感謝

+1

也許按鈕是孩子的孩子,也就是孫子嗎? IIRC'EnumChildWindow'遞歸枚舉,而'FindWindowEx'不能。 – rodrigo

+0

@rodrigo是的,這是正確的。它實際上是兩個層次。從問題[EnumChildWindows或FindWindowEx](http://stackoverflow.com/questions/1823628/enumchildwindows-or-findwindowex)我有一個印象,他們的工作方式相似。你應該把它作爲答案發布,所以我可以接受它。謝謝 –

回答

2

[從OP評論]也許按鈕是一個孩子的孩子,即一個孫子? IIRC EnumChildWindow遞歸枚舉,而FindWindowEx沒有。

+0

不幸的是,FindWindowEx不執行遞歸搜索 –