Python:如何从另一个程序窗口获取文本标签?

5 投票
2 回答
8878 浏览
提问于 2025-04-17 13:30

我想用Python从另一个程序中读取文本标签。我觉得我需要用到WM_GETTEXT这个东西,但我不知道怎么用,也在网上找不到相关的信息。我的程序可以获取当前活动窗口,但就是不能读取文本标签。所以我希望有人能帮我。

补充说明:我已经添加了缓冲区和SendMessage的部分。我可以从编辑器中获取文本,比如说,但就是无法从我想要获取文本标签的程序中读取。

我有以下代码,是我在stackoverflow上找到的(从弹出窗口获取文本):

import win32gui
import time

while True:
    window = win32gui.GetForegroundWindow()
    title = win32gui.GetWindowText(window)
    if 'GLS Exportdatei' in title:
        control = win32gui.FindWindowEx(window, 0, 'static', None)
        buffer = win32gui.PyMakeBuffer(20)
        length = win32gui.SendMessage(control, win32con.WM_GETTEXT, 20, buffer)

        result = buffer[:length]
        print result
        time.sleep(1)

2 个回答

2

win32gui.PyMakeBuffer这个功能已经不再推荐使用了。另外,buffer是一个内置的函数,所以不要把它当作变量名来用。

你可以这样做:

buf = " " * 255
length = win32gui.SendMessage(control, win32con.WM_GETTEXT, 255, buf)
result = buf[:length]
5

如果你的窗口里的文字超过了20个字符,那么你创建的缓冲区就太小了。试着把它扩大到一个你可能需要的更大尺寸:

buffer = win32gui.PyMakeBuffer(255)
length = win32gui.SendMessage(control, win32con.WM_GETTEXT, 255, buffer)

如果你想访问主窗口里的控件,可以使用EnumChildWindows,并传入父窗口的句柄。你可能需要递归地进行这个操作。

撰写回答