[英]win32gui: how to get the status bar text of a window?
我想获取窗口的状态栏文本! 我正在使用win32gui.GetWindowText
,但我无法获取状态栏文本。 我只知道标题! 如何获取状态栏文本?
#coding=utf-8
import win32gui
# get main window handle
f = win32gui.FindWindow("TMDIForm",None)
print f,win32gui.GetWindowText(f)
#get child window handle of main window
ex=win32gui.FindWindowEx(f,None,"TPanel",None)
#get child window handle of ex window
exx=win32gui.FindWindowEx(ex,None,"TStatusBar",None)
print exx,win32gui.GetWindowText(exx)
以下应该有所帮助,您不能在状态栏上使用GetWindowText
。 一个状态栏通常由多个子项组成。 要访问这些用途,需要将SendMessage
与SB_GETTEXT
一起使用。
#coding=utf-8
import win32gui
import win32api
import win32con
# get main window handle
f = win32gui.FindWindow("TMDIForm",None)
print f,win32gui.GetWindowText(f)
#get child window handle of main window
ex=win32gui.FindWindowEx(f,None,"TPanel",None)
#get child window handle of ex window
exx=win32gui.FindWindowEx(ex,None,"TStatusBar",None)
SB_GETTEXT = win32con.WM_USER + 2
SB_GETTEXTLENGTH = win32con.WM_USER + 3
sub_item = 0
sb_retcode = win32api.SendMessage(exx, SB_GETTEXTLENGTH, sub_item, 0)
sb_type = sb_retcode & 0xFFFF
sb_length = (sb_retcode >> 16) & 0xFFFF
text_buffer = win32gui.PyMakeBuffer(1 + sb_length)
sb_retcode = win32api.SendMessage(exx, SB_GETTEXT, sub_item, text_buffer)
print text_buffer
我无法对此进行测试,因为我找不到合适的 Window。
如果目标窗口归当前进程所有,GetWindowText 会导致 WM_GETTEXT 消息发送到指定的窗口或控件。 如果目标窗口由另一个进程拥有并具有标题,则 GetWindowText 检索窗口标题文本。 如果窗口没有标题,则返回值为空字符串。 此行为是设计使然。 如果拥有目标窗口的进程没有响应,它允许应用程序调用 GetWindowText 而不会变得无响应。 但是,如果目标窗口没有响应并且它属于调用应用程序,GetWindowText 将导致调用应用程序无响应。
要在另一个进程中检索控件的文本,请直接发送 WM_GETTEXT 消息而不是调用 GetWindowText。
# hwnd = your TStatusBar or TToolBar or anything
buffer_len = win32gui.SendMessage(hwnd, win32con.WM_GETTEXTLENGTH, 0, 0) + 1
text = array('b', b'\x00\x00' * buffer_len)
text_len = win32gui.SendMessage(hwnd, win32con.WM_GETTEXT, buffer_len, text)
text = win32gui.PyGetString(text.buffer_info()[0], buffer_len - 1)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.