我在概念上不明白我应该对 EnumChildWindows 的第二个参数做什么。 API ref 假设比我有更多的知识/经验(我是业余爱好者),并且阅读有关回调函数的内容对我的理解没有帮助。有人可以解释一下吗?
我想要做的是获取子 HWND 的 Python 列表,然后我可以迭代该列表以找到特定的窗口/控件来读取其文本。我已经整理了可以完成第二部分的代码,但只有在我给它一个硬编码的子 HWND 时才有效,这就是我在这里尝试自动化的。
我正在使用Python 3.11和win32api模块
hwnd = win32gui.FindWindow(None, window_title_text)
child_windows = []
win32gui.EnumChildWindows(hwnd , ???, child_windows)
函数的第二个参数是一个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}'")