如何利用Python和win32编程避免重复性体力劳动(三)——文本框操作:WM_GETTEXT 和WM_SETTEXT
来源:互联网 发布:云计算ai工程师 编辑:程序博客网 时间:2024/06/04 19:07
Part 3:控件操作A
通过菜单的目录操作,我们打开了打开文件对话框。为了简单起见,我们可以直接在文件名处填入要打开文件的绝对路径。怎么填呢?
首先还是定位到文本框控件
find_subHandle()是在Part 1中定义的函数,可以按照列表的信息查找Mhandle的子窗体。列表中的元组提供窗体的类名和排位号(z-index)。列表索引编号较小的为父窗体。
接着我们依然是利用win32的消息机制,给这个文本框控件送去一个消息:
在这里,我们用了SendMessage而不是PostMessage,其区别就在于我们可以通过SendMessage取得消息的返回信息。因为对于我们要设置文本框信息的WM_SETTEXT信息来说,设置成功将返回True。
SendMessage(hWnd, Msg, wParam, lParam)
- 描述:在消息队列中加入为指定的窗体加入一条消息,直到窗体处理完信息才返回。
- 参数:
- hWnd:整型,接收消息的窗体句柄
- Msg:整型,要发送的消息,这些消息都是windows预先定义好的,可以参见系统定义消息(System-Defined Messages).aspx#system_defined)
- wParam:整型,消息的wParam参数
- lParam:整型,消息的lParam参数
- 说明:wParam和IParam根据具体的消息不同而有不同的定义,详情参阅Part 2.
WM_SETTEXT 消息
- 描述:设置窗体的文本
- 参数:
- wParam:未使用
- lParam:一个指针,指向以null结尾的字符串。窗体文本将被设置为该字符串。
- 返回值:
- 如果成功设置,则返回1(MSDN原文是返回True)
- 说明:
- 上面的定义是直接从MSDN上翻译过来的,在Python的语境里面没有指针,你只需要把变量名作为lParam传入就好了。
- 另外,请注意编码,包含中文请用gbk编码,否则乱码。
再利用一个WM_COMMAND消息来点击确定按钮:
- WM_COMMAND 消息
- 描述:当用户选择了菜单(或按钮等控件的)命令,或控件发送通知到父窗口,或加速键击(accelerator keystroke is translated)时发送。
- 参数:根据情景不同而不同,在这里属于用户命令,参数配置如下
- wParam:HIWORD为0(未使用),LOWORD为控件的ID
- lParam:0(未使用)
- 返回值:如果窗体处理了消息,应返回0
综上,我们现在就可以利用win32的各种API完成打开fg文件的任务了。
顺便,如果要获取目标文本框的内容呢,可以使用WM_GETTEXT,如下:
- WM_GETTEXT 消息:
- 描述:将窗体的文本内容复制到指定的buffer对象中
- 参数:
- wParam:要复制字符的最大长度,包括截尾的空字节
- lParam:用来保存字符串的buffer的指针
- 返回值:返回复制字符的数量,不包括截尾的空字节
利用win32gui.PyMakeBuffer(len, addr)可以造一个buffer对象,类似python3中的bytearray,lParam的返回值。而利用WM_GETTEXTLENGTH可以获取不含截尾空字节的文本长度的长度,可以用来设置Buffer的长度。完整的示例如下:
阅读全文
0 0
- 如何利用Python和win32编程避免重复性体力劳动(三)——文本框操作:WM_GETTEXT 和WM_SETTEXT
- 如何利用Python和win32编程避免重复性体力劳动(三)——文本框操作:WM_GETTEXT 和WM_SETTEXT
- 如何利用Python和win32编程避免重复性体力劳动(四)——下拉列表操作:CB_SETCURSEL、CBN_SELENDOK和CBN_SELCHANGE
- 如何利用Python和win32编程避免重复性体力劳动(四)——下拉列表操作:CB_SETCURSEL、CBN_SELENDOK和CBN_SELCHANGE
- 如何利用Python和win32编程避免重复性体力劳动(一)——开始、FindWindow和FindWindowEx
- 如何利用Python和win32编程避免重复性体力劳动(一)——开始、FindWindow和FindWindowEx
- 如何利用Python和win32编程避免重复性体力劳动(二)——菜单操作:GetMenu,GetSubMenu,GetMenuItemID以及wParam的HIWORD&LOWORD
- 如何利用Python和win32编程避免重复性体力劳动(二)——菜单操作:GetMenu,GetSubMenu,GetMenuItemID以及wParam的HIWORD&LOWORD
- 利用Python和win32编程范例——按需定制一个按键精灵
- 利用Python和win32编程范例——按需定制一个按键精灵
- IOS开发基础—利用代码添加按钮和文本框
- Perl 利用Win32::OLE操作Excel 技巧和诀窍
- python第十五课——图形界面文本框排列和调用
- Google总部医师:如何避免重复性压力损伤
- Python中如何避免使用多个分支语句(多个if和else)——函数字典(Function Map)简介
- 如何利用Python和VC6.0对SQLite数据库进行操作
- Win32 串口编程(三)
- Win32 串口编程(三)
- 原型和原型链
- 数据库设计中常见表结构的设计技巧
- Tomcat配置跨域问题
- fiddler和wireshark工具介绍及对比
- python下安装和使用opencv
- 如何利用Python和win32编程避免重复性体力劳动(三)——文本框操作:WM_GETTEXT 和WM_SETTEXT
- python numpy 矩阵用法
- scrapy抓取quote使用案例
- session和cookie的简单用法
- DUBBO 详细介绍
- 检查代理ip的有效性
- 利用栈和递归进行字符串逆序
- WOJ1222-Cheapest Palindrome
- 关于Collections的学习笔记