如何获取子窗口的句柄

获取子窗口的句柄可以使用 FindWindowEx 函数和枚举子窗口的方式进行。以下是两种方法的实现:

  1. 使用 FindWindowEx 函数 使用 FindWindowEx 函数可以在指定窗口的所有子窗口中查找符合条件的子窗口,并返回子窗口句柄。可以根据子窗口类名和子窗口标题来查找子窗口句柄。例如:
import win32gui
parent_handle = 0x012345  # 父窗口句柄
child_class_name = "Edit"  # 子窗口类名
child_title = "输入框"  # 子窗口标题
child_handle = win32gui.FindWindowEx(parent_handle, 0, child_class_name, child_title)

需要注意的是,FindWindowEx 函数会在所有子窗口中查找符合条件的子窗口,如果存在多个符合条件的子窗口,则只返回第一个找到的子窗口句柄。

2. 枚举子窗口 使用 EnumChildWindows 函数可以枚举指定窗口的所有子窗口,并使用回调函数处理每个子窗口。例如:

import win32gui
def callback(hwnd, param):
    # 判断子窗口是否符合条件
    if win32gui.GetClassName(hwnd) == "Edit" and win32gui.GetWindowText(hwnd) == "输入框":
        # 将子窗口句柄添加到列表中
        param.append(hwnd)
parent_handle = 0x012345  # 父窗口句柄
child_handles = []
win32gui.EnumChildWindows(parent_handle, callback, child_handles)

其中,回调函数 callback 会被调用多次,每次处理一个子窗口,如果子窗口符合条件,则将子窗口句柄添加到列表中。需要注意的是,回调函数的第一个参数是子窗口句柄,第二个参数是传递给 EnumChildWindows 函数的参数,可以用于在回调函数中传递额外的信息。

以上是获取子窗口句柄的两种方法,可以根据需要选择合适的方法。