pywin32 怎么获取 windows 的窗体内文本框的内容?

2016-12-13 12:55:12 +08:00
 toono

我已经用 spy++去确认我找到了文本框的句柄了。

用函数 win32gui.SendMessage 获取不了文本框的文本内容,用 str 类型的参数接收获取的内容的话没有获取到东西,而用 PyBuffer 类型去获取则得到类似于 16 进制的东西。

希望能找到解决方案。 以下是代码:

from win32gui import *
from win32api import *
from win32process import *
import win32con

import time

time.sleep(3)

# 获取窗体句柄
hWnd = GetForegroundWindow()
print('hownd: ', hWnd)

FormThreadID = GetCurrentThreadId()
print('FormThreadID: ', FormThreadID)

CWndThreadID = GetWindowThreadProcessId(hWnd)
print('CWndThreadID: ', CWndThreadID)

AttachThreadInput(CWndThreadID[0], FormThreadID, True)

# 获取光标所在文本框句柄
hWnd = GetFocus()
print('hWnd: ', hWnd)

AttachThreadInput(CWndThreadID[0], FormThreadID, False)

# SendMessage(hWnd, win32con.WM_SETTEXT, 0, "mextb1860 第一个文本框")

# 文本框内容长度
length = SendMessage(hWnd, win32con.WM_GETTEXTLENGTH)+1
print('Length: ', length)

buf = '0'*length
# 生成buffer对象
# buf = PyMakeBuffer(length)

# 获取文本框内容
print('get: ', SendMessage(hWnd, win32con.WM_GETTEXT, length, buf))

print('text: ', buf)
14772 次点击
所在节点    Python
8 条回复
kanchi240
2016-12-13 13:30:38 +08:00
鼠标双击,复制到剪贴板
lishunan246
2016-12-13 14:57:13 +08:00
# 生成 buffer 对象
buf = PyMakeBuffer(length)
print('get: ', SendMessage(hWnd, win32con.WM_GETTEXT, length, buf))
address, length = PyGetBufferAddressAndLen(buf)
text = PyGetString(address, length)
print('text: ', text)
toono
2016-12-13 15:42:28 +08:00
@lishunan246 👍关于 buffer 的讨论搜索到的好少
toono
2016-12-13 15:48:15 +08:00
关于字符转换的另一个解决方案

https://www.v2ex.com/t/327324
phrack
2016-12-13 20:09:37 +08:00
不要使用 Python 做这个工作
toono
2016-12-14 09:28:45 +08:00
@phrack 公司的客户端就是 python 写的,要实现这个需求。。。
phrack
2016-12-25 20:40:16 +08:00
@toono 你完全可以用另外的语言写一个模块甚至是编译个 exe 也可以,然后 Python 调用这个模块就好了。
toono
2016-12-27 14:51:48 +08:00
@phrack 你说这是个不错的办法~

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/327286

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX