我有一些代码:
def get_text(self, id):
edit_hwnd = win32gui.GetDlgItem(self.hwnd, id) # 获取窗口句柄
time.sleep(0.2)
self.edit_hwnd = edit_hwnd
length = win32api.SendMessage(
edit_hwnd, win32con.WM_GETTEXTLENGTH) + 1 # 获取窗体内容长度
buf = win32gui.PyMakeBuffer(length) # 准备buffer对象作为容器
win32gui.SendMessage(edit_hwnd, win32con.WM_GETTEXT,
length, buf) # 获取窗体内容放入容器
try:
address, length = win32gui.PyGetBufferAddressAndLen(buf) # 获取容器的内存地址
except ValueError:
print('error')
return
text = win32gui.PyGetString(address, length) # 取得字符串
buf.release()
del buf
return text
此函数用于在Windows上获取字符串。我需要在此func中始终获取此值。当值更改时,我会执行某些操作。但是现在当我执行此操作时,我的程序将退出,错误代码为C000005。我解决了。
buf.release()
del buf
当我发现此问题时添加了它。它似乎不起作用。
答案 0 :(得分:1)
消息WM_GETTEXTLENGTH
返回以字符表示的文本长度(不包括终止空字符)和给{{3}的最大缓冲区长度}也是基于字符(包括的终止空字符)。
基于NT的Windows系统中的字符被编码为双字节字符集(DBCS),即每个字符两个字节。
函数win32gui.PyMakeBuffer(length)
返回length
个字节的缓冲区。
因此,如果length
是WM_GETTEXTLENGTH
的返回值,则保留缓冲区的长度应为length * 2 + 2
个字节,而赋予WM_GETTEXT
的最大缓冲区长度应为{{1 }}。