
我已经用 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) 1 kanchi240 2016-12-13 13:30:38 +08:00 鼠标双击,复制到剪贴板 |
2 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) |
3 toono OP @lishunan246 关于 buffer 的讨论搜索到的好少 |
5 phrack 2016-12-13 20:09:37 +08:00 via Android 不要使用 Python 做这个工作 |