我想用Python阅读其他程序的文本标签。我想我必须使用WM_GETTEXT,但我不知道如何在互联网上找不到任何东西。我的程序获取活动窗口,但不读取文本标签。所以我希望有人可以帮助我。
编辑:我添加了缓冲区和SendMessage部分。例如,我可以从编辑器中获取文本,但不是从我尝试从中获取文本标签的程序。
我有以下代码,我在stackoverflow(Get text from popup window)上找到了这些代码:
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)
答案 0 :(得分:5)
如果窗口文本超过20个字符,则您创建的缓冲区太小。尝试将其扩展到超出您可能需要的范围:
buffer = win32gui.PyMakeBuffer(255)
length = win32gui.SendMessage(control, win32con.WM_GETTEXT, 255, buffer)
如果要访问主窗口中的控件,请使用EnumChildWindows,传递父窗口的句柄。您可能需要递归执行此操作。
答案 1 :(得分:2)
win32gui.PyMakeBuffer
已被弃用。另外,buffer
是内置函数,因此不要将其用作变量名。
相反,只需这样做:
buf = " " * 255
length = win32gui.SendMessage(control, win32con.WM_GETTEXT, 255, buf)
result = buf[:length]