You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python如何获取Windows应用DASTraderPro子窗口文本并高频刷新

从DASTraderPro子窗口高频提取文本的Python实现方案

前置依赖安装

执行命令安装Windows API调用库:
pip install pywin32

核心逻辑

绕过速度过慢的OCR方案,直接调用Windows原生API遍历目标应用的子窗口,通过SendMessage发送系统消息获取控件文本,单轮提取耗时通常在10ms以内,完全可以满足0.5秒级的刷新要求。

具体实现代码

import win32gui
import win32con
import time

# 替换为DASTraderPro主窗口的实际标题,可在任务管理器的应用详情里查看,或用Spy++工具获取
MAIN_WINDOW_TITLE = "DASTraderPro"
# 可选:提前用Spy++查到目标文本所在子窗口的控件ID,可跳过遍历逻辑,直接提取,速度更快
TARGET_CTRL_ID = None # 示例值:1001,替换为实际ID后生效

child_hwnd_list = []

# 子窗口枚举回调函数,会自动遍历主窗口下所有层级的子窗口
def enum_child_callback(hwnd, extra):
    child_hwnd_list.append(hwnd)
    return True

# 读取指定窗口的文本内容,比GetWindowText兼容性更强,支持跨进程读取子窗口文本
def get_hwnd_text(hwnd):
    text_length = win32gui.SendMessage(hwnd, win32con.WM_GETTEXTLENGTH, 0, 0)
    if text_length == 0:
        return ""
    # 申请对应长度的缓冲区存储文本
    buffer = win32gui.PyMakeBuffer(text_length + 1)
    win32gui.SendMessage(hwnd, win32con.WM_GETTEXT, text_length + 1, buffer)
    # 中文系统默认用gbk编码,乱码可尝试替换为utf-8
    return buffer.tobytes().decode("gbk", errors="ignore").strip()

def extract_das_text():
    child_hwnd_list.clear()
    # 查找DASTraderPro主窗口句柄
    main_hwnd = win32gui.FindWindow(None, MAIN_WINDOW_TITLE)
    if not main_hwnd:
        return {}
    # 遍历所有子窗口
    win32gui.EnumChildWindows(main_hwnd, enum_child_callback, None)
    result = {}
    for hwnd in child_hwnd_list:
        ctrl_id = win32gui.GetWindowLong(hwnd, win32con.GWL_ID)
        # 如果指定了目标控件ID,直接返回对应文本
        if TARGET_CTRL_ID and ctrl_id == TARGET_CTRL_ID:
            return {ctrl_id: get_hwnd_text(hwnd)}
        text = get_hwnd_text(hwnd)
        if text:
            result[ctrl_id] = text
    return result

if __name__ == "__main__":
    # 循环提取,间隔0.5秒
    while True:
        das_data = extract_das_text()
        # 这里替换为你自己的处理逻辑,比如存库、打印等
        print(das_data)
        time.sleep(0.5)

常见问题处理

  • 如果提取结果为空,优先用Spy++工具查看DASTraderPro的控件类型:如果是自绘控件、Qt/QML、WPF控件,无法通过SendMessage拿到文本,可改用高速OCR方案:用mss库做毫秒级截图,搭配基于ONNX Runtime的轻量OCR模型,单轮识别耗时可控制在100ms以内,也能满足刷新要求。
  • 提前查到目标子窗口的控件ID后,填写到TARGET_CTRL_ID变量,可跳过全量子窗口遍历,进一步提升提取速度。
  • 窗口标题如果有动态后缀,可以用win32gui.EnumWindows遍历所有窗口模糊匹配标题,不用精确匹配。

内容的提问来源于stack exchange,提问作者GIkon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 08:15:02