吾八哥博客

您现在的位置是:首页 > 码农手记 > Python > 正文

Python

吾八哥学Pywinauto(三):使用Pywinauto操作菜单的方法

吾八哥2018-02-10Python7721

前言

WinForm程序里菜单是使用频率非常高的一个基础的控件了,今天来学习下使用Pywinauto如何枚举出所有的菜单项,如何操作某个菜单项,暂时还是拿记事本程序来练习吧!记事本顶部就是菜单,如图:

TIM图片20180210215720.png

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后面的参数尽量写完整的路径吧,快捷键字符的除外。