使用 pywinauto 模拟鼠标键盘操作

官方文档

比较好的教程    要快速上手可以看下面的例程


例程:

这个可以用来检验模块是否安装好了

from pywinauto.application import Application
'''启动App,如 记事本'''
app = Application(backend="uia").start("notepad.exe")

'''选定窗口'''
edit_window = app['无标题']
'''打印窗口控件信息'''
edit_window.dump_tree() # 根据打印出的窗口树关系操作控件,可以用一个文本文档保存该dump_tree,方便之后使用

这里我直接将控件信息保存在新打开的notepad中,命名为1.txt    比如 下图中这段就是 文件(F) 按钮和 编辑(E) 按钮对应的控件信息

            

模拟鼠标点击:

from pywinauto.application import Application

try:   
    '''对于已经启动的窗口,可以直接连接'''
    app = Application(backend="uia").connect(title_re="abc.txt - 记事本") #如果有两个相同标题的窗口,匹配就会有问题
    '''选定窗口'''
    note_window = app['abc.txt - 记事本']  
    '''点击 编辑——>查找'''
    note_window.menu_select("编辑->查找(F)")  # control_type为MenuBar类的控件可以调用该方法
    '''点击 滚动条'''
    ScrollBar = note_window.child_window(title="文本编辑器").child_window(auto_id="NonClientVerticalScrollBar") #子窗口可以用title或auto_id确定
    for _ in range(10):        
        ScrollBar.child_window(title="下一行").click() # Button类的控件可以点击
    
except BaseException as e:
    print('abc.txt未打开或者没有关闭重开
', e)

  注意:选定窗口这一步是必要的,而且窗口被控制一次后需要关闭重开(原因的话试试就知道了~。~)

     其他类型(control_type)的控件也有自己的操作方法,比如 下拉框 可以用 click_input() 点开,再 click() 选中其中的项

                                (click_input是真正移动光标,click只是发送窗口消息)

     可用于每种不同类型控件的方法

     读取窗口中的字符可以用 child_window().legacy_properties()['Value'] 

     dump_tree() 方法在任意子窗口都可以调用,建议找控件信息时在对应 child_window() 处使用


获取控件信息除了 dump_tree() 也可以用软件

  资源链接:https://github.com/blackrosezy/gui-inspect-tool

  如果是win32模式连接窗口的话,建议用UISpy,mode设置为Hovering

  只要鼠标移到控件对应位置上,按一下Ctrl就可以定位到控件,在Properties栏看到控件的win32模式下信息

  但是,使用这个软件时不能对软件自身窗口的控件定位(会卡死),也不能点Edit——>Setting(有bug)


模拟键盘

  参考博客

from pywinauto.keyboard import send_keys

send_keys('{ENTER}')

   

原文地址:https://www.cnblogs.com/Pio-GD/p/14332137.html