python pywin32 PyUserInput实现自动化脚本
pywin32用spy++工具查找到句柄,再结合PyUserInput就能很好地实现自动化脚本。
句柄是一个32位整数,在windows中标记对象用,类似一个dict中的key,详情参看这篇文章。
1 | import win32gui |
感谢python win32api win32gui win32con 窗口句柄 发送消息 常用方法 键盘输入,代码主要来自于他
▲.需要注意在windows和mac下接口参数可能有所不同。
win32虽然也可控制键盘,但不如使用PyUserInput的方便。安装PyUserInput教程
1 | from pymouse import PyMouse |
附录
查找窗体句柄
貌似在win32编程的世界里,包括窗口到文本框的所有控件就是窗体,所有的窗体都有独立的句柄。要操作任意一个窗体,你都需要找到这个窗体的句柄
1 | FindWindow(lpClassName=None, lpWindowName=None): |
1 | FindWindowEx(hwndParent=0, hwndChildAfter=0, lpszClass=None, lpszWindow=None); |
另外,python中找回来的句柄都是十进制整型,Spy++里显示的都是十六进制整型,这个要注意下,调试的时候用十六进制输出句柄,如下:print "%x" % (handle)
1 | GetMenu(hwnd) |
1 | PostMessage(hWnd, Msg, wParam, lParam) |
查阅MSDN的消息时,会发现有的wParam定义了low word和high word,这是什么呢?wParam的定义是32位整型,high word就是他的31至16位,low word是它的15至0位,如图。有时,一个消息只需要不超过两个参数,那wParam就可以当一个参数用。万一参数多了,wParam就给拆成了两个int16来使用。这种时候在python里记得用16进制把整形表示出来就比较清爽啦。
用了SendMessage而不是PostMessage,其区别就在于我们可以通过SendMessage取得消息的返回信息。因为对于我们要设置文本框信息的WM_SETTEXT信息来说,设置成功将返回True。
1 | SendMessage(hWnd, Msg, wParam, lParam) |
1 | WM_COMMAND 消息 |
1 | 顺便,如果要获取目标文本框的内容呢,可以使用WM_GETTEXT,如下: |
1 | Part 4:控件操作B——下拉 |
1 | if win32api.SendMessage(CB_handle, win32con.CB_SETCURSEL, format_dict[format], 0) == format_dict[format]: |
Author: Mrli
Link: https://nymrli.top/2018/08/31/python-win32api-win32gui-win32con-PyUserInput实现自动化脚本/
Copyright: All articles in this blog are licensed under CC BY-NC-SA 3.0 unless stating additionally.