可以使用 pywin32 模块获取 Windows 窗口的文本内容。以下是获取窗口句柄和文本的基本方法:
import win32gui
# 获取窗口句柄
handle = win32gui.FindWindow(None, '窗口标题')
# 获取窗口文本
text = win32gui.GetWindowText(handle)
# 获取窗口类名
class_name = win32gui.GetClassName(handle)
# 获取子窗口句柄列表
child_handles = []
win32gui.EnumChildWindows(handle, lambda hwnd, param: param.append(hwnd), child_handles)
其中,第一个参数是父窗口句柄,第二个参数是回调函数,第三个参数是传递给回调函数的参数。在上面的代码中,我们使用 lambda 表达式定义了一个简单的回调函数,它将找到的子窗口句柄添加到传递的列表中。
有时候,窗口的文本可能是动态生成的,比如浏览器中的页面内容。这种情况下,我们可以使用 Windows 的 UI Automation API 来获取窗口的文本内容,以下是一个示例代码:
import comtypes.client
# 获取窗口句柄
handle = win32gui.FindWindow(None, '窗口标题')
# 初始化 UI Automation API
UIA = comtypes.client.GetModule('UIAutomationCore.dll')
IUIA = comtypes.CoCreateInstance(UIA.CUIAutomation().CLSID, interface=UIA.IUIAutomation)
# 获取窗口元素
element = IUIA.ElementFromHandle(handle)
# 获取窗口文本
text_pattern = IUIA.Patterns.Text.Pattern
text_element = element.GetCurrentPattern(text_pattern).GetParentElement().GetCurrentPattern(text_pattern)
text = text_element.DocumentRange.GetText(-1)
这段代码使用了 comtypes 模块来调用 UI Automation API,获取窗口的文本内容。需要注意的是,这种方法需要安装 Windows SDK 或者 Windows App Certification Kit,否则无法使用 UI Automation API。