我是winapi的新手,我有一个(专有)软件的窗口。任务是在其中找到按钮并从我的Python程序中“单击”它。这个解决方案很好,我能够获得目标窗口的HWND: python win32gui finding child windows
这个片段看起来也不错: Finding Handle of a control inside a window 但是按钮的标题是未知的,在我的情况下它只有一个图标和一个工具提示(“重新连接”)。
所以我需要知道如何找到所需的按钮元素并模拟点击它。
提前谢谢。
编辑。 最后我设法解决了这个问题(有点天真):
def reconnect(win_title):
"""
This method accepts window's title,
looks for the 'reconnect' button and
'clicks' this button
"""
# parent window
hwnd = win32gui.FindWindow(0, win_title)
# fetch all children windows' hwnds
# store them in a list
inplay_children = []
def is_win_ok(hwnd, *args):
s = win32gui.GetWindowText(hwnd)
inplay_children.append(hwnd)
win32gui.EnumChildWindows(hwnd, is_win_ok, None)
# obtain hwnd of "reconnect button",
# its index == -3 (I guessed that)
reconn_button_hwnd = inplay_children[-3]
# bring window to foreground
win32gui.SetForegroundWindow(hwnd)
# send click to "reconnect button"
win32api.PostMessage(reconn_button_hwnd, win32con.WM_LBUTTONDOWN, 0, 0)
win32api.PostMessage(reconn_button_hwnd, win32con.WM_LBUTTONUP, 0, 0)
我希望这是有用的。