python win32gui 查找子窗口

2 投票
1 回答
17893 浏览
提问于 2025-04-15 23:24

比如说,首先你需要找到Skype的窗口句柄,也就是它的一个唯一标识符。

hwnd = win32gui.FindWindow(None, 'skype')

然后,你还需要找到它所有的子窗口以及这些子窗口的标题。

child = ???

有什么想法吗?

1 个回答

8

这段代码展示了EditPlus子窗口的hwnd,这些窗口的WindowsText有一定的长度:

编辑

你需要找到你应用程序的hwnd,然后用这个句柄去调用EnumChildWindows。我在示例代码中加了这个部分。一旦你得到了应用程序的hwnd,你就可以列举出它的所有窗口。如果你把hwnd设置为0传给EnumChildWindows,你会得到所有正在运行的窗口的句柄。可以在我的代码中加一些打印语句来检查一下!

扩展代码:

import win32gui

MAIN_HWND = 0

def is_win_ok(hwnd, starttext):
    s = win32gui.GetWindowText(hwnd)
    if s.startswith(starttext):
            print s
            global MAIN_HWND
            MAIN_HWND = hwnd
            return None
    return 1


def find_main_window(starttxt):
    global MAIN_HWND
    win32gui.EnumChildWindows(0, is_win_ok, starttxt)
    return MAIN_HWND


def winfun(hwnd, lparam):
    s = win32gui.GetWindowText(hwnd)
    if len(s) > 3:
        print("winfun, child_hwnd: %d   txt: %s" % (hwnd, s))
    return 1

def main():
    main_app = 'EditPlus'
    hwnd = win32gui.FindWindow(None, main_app)
    print hwnd
    if hwnd < 1:
        hwnd = find_main_window(main_app)
    print hwnd
    if hwnd:
        win32gui.EnumChildWindows(hwnd, winfun, None)

main()

撰写回答