吾八哥学Pywinauto(三):使用Pywinauto操作菜单的方法
前言
WinForm程序里菜单是使用频率非常高的一个基础的控件了,今天来学习下使用Pywinauto如何枚举出所有的菜单项,如何操作某个菜单项,暂时还是拿记事本程序来练习吧!记事本顶部就是菜单,如图:
Pywinauto枚举所有菜单项
首先我们看看Pywinauto枚举打印出所有菜单的方法吧:
# Autor: 5bug # WebSite: http://www.XuePython.wang # 学Python网QQ群: 643829693 import pywinauto #打印出所有的菜单项,由于菜单可能是多级,所以得采用递归 def ShowMenus(MenuItem, Spaces = ""): if None == MenuItem: return Spaces = Spaces + " " for Item in MenuItem.Items(): if (2048 != Item.Type()): print(Spaces + Item.Text()) SubMenu = Item.SubMenu() if None != SubMenu: ShowMenus(SubMenu, Spaces) if __name__ == "__main__": # 启动记事本应用程序 app = pywinauto.Application().start("notepad.exe") # 取得当前程序对话框窗口 dlg = app.Notepad ShowMenus(dlg.Menu())
运行结果为:
文件(&F) 新建(&N) Ctrl+N 打开(&O)... Ctrl+O 保存(&S) Ctrl+S 另存为(&A)... 页面设置(&U)... 打印(&P)... Ctrl+P 退出(&X) 编辑(&E) 撤消(&U) Ctrl+Z 剪切(&T) Ctrl+X 复制(&C) Ctrl+C 粘贴(&P) Ctrl+V 删除(&L) Del 查找(&F)... Ctrl+F 查找下一个(&N) F3 替换(&R)... Ctrl+H 转到(&G)... Ctrl+G 全选(&A) Ctrl+A 时间/日期(&D) F5 格式(&O) 自动换行(&W) 字体(&F)... 查看(&V) 状态栏(&S) 帮助(&H) 查看帮助(&H) 关于记事本(&A)
因为菜单使用Spy++基本上抓不到,所以这个枚举所有的菜单项的方法特别有用。
Pywinauto操作菜单项
Pywinauto里操作菜单的方法是menu_select,该方法的参数是根据菜单项的标题使用->连接起来的,来控制多级菜单项的。上面的枚举菜单项的功能可以帮助我们如果去找这些菜单的文本的。
如打开关于窗口:
dlg.menu_select("帮助->关于记事本")
打开替换窗口:
dlg.menu_select("编辑->替换(&R)...")
menu_select后面的参数尽量写完整的路径吧,快捷键字符的除外。