我不明白如何使用EnumChildWindows(win32 API)

问题描述 投票:0回答:1

我在概念上不明白我应该对 EnumChildWindows 的第二个参数做什么。 API ref 假设比我有更多的知识/经验(我是业余爱好者),并且阅读有关回调函数的内容对我的理解没有帮助。有人可以解释一下吗?

我想要做的是获取子 HWND 的 Python 列表,然后我可以迭代该列表以找到特定的窗口/控件来读取其文本。我已经整理了可以完成第二部分的代码,但只有在我给它一个硬编码的子 HWND 时才有效,这就是我在这里尝试自动化的。

我正在使用Python 3.11和win32api模块

hwnd = win32gui.FindWindow(None, window_title_text) 

child_windows = []
win32gui.EnumChildWindows(hwnd , ???, child_windows)
python winapi
1个回答
0
投票

函数的第二个参数是一个callback函数,或者在C/C++世界中是一个函数指针,它接受2个参数作为参数 第一个是 hwnd,第二个是另一个 对象/指针 作为第三个参数传递给 EnumChildWindows

如果您使用 NULL hwnd 调用 EnumChildWindows,它将枚举系统中的所有窗口

例如:

EnumChildWindows(0, function_pointer, "my_value")

我对你的问题的实现如下:

from win32gui import EnumChildWindows, GetWindowText


my_target_hwnd = 0
def function_pointer(child_hwnd, target_name):
    global my_target_hwnd
    name = GetWindowText(child_hwnd)
    if target_name in name:
        my_target_hwnd = child_hwnd
        # Iteration stops when you return False
        return False


EnumChildWindows(0, function_pointer, "python")
if my_target_hwnd == 0:
    print("window not found")
    exit()

print(f"found window with hwnd '{my_target_hwnd}'")
© www.soinside.com 2019 - 2024. All rights reserved.