当前位置: 欣欣网 > 码农

pywinauto,一款Win自动化利器!

2024-06-28码农

点击上方 " Python人工智能技术 " 关注, 星标或者置顶

22点24分准时推送,第一时间送达

后台回复「 大礼包 」,送你特别福利

编辑: 乐乐 | 来自:冰冷的希望

链接:https://blog.csdn.net/qq_39147299/article/details/132409817

上一篇:

大家好,我是Python人工智能技术

1.安装

pywinauto是一个 用于自动化Python模块 ,适合Windows系统的软件(GUI),可以 通过Pywinauto遍历窗口 (对话框)和窗口里的控件,也可以 控制鼠标和键盘输入 ,所以它能做的事情比之前介绍的pysimplegui更多

一般使用pip安装就行了

pip install pywinauto

官网文档:https://pywinauto.readthedocs.io/en/latest/

2.Application

我们要控制软件的第一件事就是启动一个Windows软件,每一个软件(进程)都是一个Application对象

实例化Application对象的时候可以传入一个backend参数,可选值为 win32(默认)和uia

  • win32对应的框架: MFC 、VB6、VCL、简单的 WinForms 控件和大多数旧的遗留应用程序

  • uia对应的框架: WinForms、WPF、商店应用程序、Qt5、浏览器

  • 如果无法知道要测试的软件是属于哪种框架,可以使用 Inspect(对应uia) Spy++ (对应win32) 看看,你看哪个显示得更全就选哪个。Inspect和Spy++需要自己安装一下

    下面是Application对象的主要方法

    举例,启动一个微信应用,通过进程号连接, 进程号就是在任务管理器里详细信息看到的PID


    3.WindowSpecification

    我们要获取窗口,一个窗口都是一个 WindowSpecification 对象,可以通过Application对象的window()方法获取,参数可以是title、 classname或者best_match等,这都可以在inspect.exe上看到,不过 需要注意的是inspect看到的Name其实对应的是window()的title参数

    WindowSpecification对象常用的方法如下

    举个栗子

    4.元素控件

    一个窗口里一般都会有各种各样的元素,比如说 按钮 (Button)、 编辑栏 (Edit)、 树状视图 (Tree View)、 复选框 (CheckBox)、 对话框 (Dialog)、 工具栏 (Toolbar)、 状态栏 (StatusBar)、 列表框 ListBox )、 窗格 (Pane)、 菜单 (Menu)、 菜单栏 MenuItem )、 静态内容 (Static)、 工具提示 (ToolTips)、 列表控件 (ListView)、 单选框 RadioButton )、 组合框 (ComboBox)、 选项卡控件 (TabControl)、 组框 (GroupBox)、 弹出菜单 (PopupMenu)、 (Header)等

    因为控件类型太多了不能一个一个学习,但是它们都有一个 element_info 的属性,访问之后会返回一个继承于 ElementInfo 的对象(UIAElementInfo或HwndElementInfo),比较重要的属性或方法如下

    这些元素除了有 element_info 可以获取一些元素的主要信息,它们还都被包装成一个Wrapper,所以也可以学一下 BaseWrapper 的常用方法和属性。其实 BaseWrapper 的方法基本上都是对 ElementInfo 进一步包装,我只列出部分方法,如下表

    说明一下,每个控件元素都有对应的Wrapper,所以上面的方法也不一定都用,需要根据实际情况进行测试区分。另外,比较有用的 click_input() type_keys() 这两个方法分别用于操作鼠标和键盘(输入),下面我会单独拿出来说一下

    鼠标操作

    鼠标点击肯定离不开点击的位置,桌面就是一个坐标,左上角为坐标原点,往右是X轴正向,往下是Y轴正向。pywinauto提供了一个mouse模块用于鼠标操作,最核心的方法是 _perform_click_input() ,不过它是一个私有方法,我们调用的是基于它的封装方法,如下表

    参数说明:

  • 参数button 的默认值都是「left」,即鼠标左键,可选值有left、right、middle、move、wheel、x

  • 参数coords 的默认值都是元组(0, 0),元组里的两个整数分别是X、Y轴的值

  • 参数wheel_dist 表示滚动的距离,大于0是向上滚动,小于0是向下滑动

  • 举个栗子

    键盘操作

    键盘操作主要是按下键盘上的按键,相关方法在keyboard模块,最最主要的是 send_keys() 方法,第一个参数 keys 就是我们需要按下的按键,其他参数比如说with_spaces、with_tabs、with_newlines、turn_off_numlock、set_foreground、vk_packet,一看就知道作用,而且都是布尔值,此处不进行举例

    pywinauto支持的完整的按键可以在官方文档查看,https://pywinauto.readthedocs.io/en/latest/code/pywinauto.keyboard.html

    下面我列举出的是一些比较常用的按键

    说明:

  • 使用按键时需要搭配大括号,比如说按下回车键是 '{ENTER}' (是字符串)

  • 在Windows平台默认是发送虚拟按键的,以 VK_ 开头的按键,都是指虚拟按钮,如果不想使用虚拟按钮可以把 VK_ 前缀去掉,把send_keys()的 vk_packet 参数改为 False 即可

  • 单个按键按下抬起还不够,往往需要组合键,这时候就需要修饰符了,在大括号里可以使用 down up 控制按键什么时候按下和抬起,如果后面加上数字,表示按下多少次

    当然,很多时候使用 down up 修饰感觉不够简洁,所以pywinauto还提供了简化写法,使用 + 代替 {VK_SHIFT} ,使用 ^ 代替 {VK_CONTROL} ,使用 % 代替 {VK_MENU}

    如果不想按下按钮,纯属想要输入纯字符串,那就需要取消转义了,注意修饰符和按钮的写法是不一样的

    为了跟上AI时代我干了一件事儿,我创建了一个知识星球社群:ChartGPT与副业。想带着大家一起探索 ChatGPT和新的AI时代

    有很多小伙伴搞不定ChatGPT账号,于是我们决定,凡是这三天之内加入ChatPGT的小伙伴,我们直接送一个正常可用的永久ChatGPT独立账户。

    不光是增长速度最快,我们的星球品质也绝对经得起考验,短短一个月时间,我们的课程团队发布了 8个专栏、18个副业项目

    简单说下这个星球能给大家提供什么:

    1、不断分享如何使用ChatGPT来完成各种任务,让你更高效地使用ChatGPT,以及副业思考、变现思路、创业案例、落地案例分享。

    2、分享ChatGPT的使用方法、最新资讯、商业价值。

    3、探讨未来关于ChatGPT的机遇,共同成长。

    4、帮助大家解决ChatGPT遇到的问题。

    5、 提供一整年的售后服务,一起搞副业

    星球福利:

    1、加入星球4天后,就送ChatGPT独立账号。

    2、邀请你加入ChatGPT会员交流群。

    3、赠送一份完整的ChatGPT手册和66个ChatGPT副业赚钱手册。

    其它福利还在筹划中... 不过,我给你大家保证,加入星球后,收获的价值会远远大于今天加入的门票费用 !

    本星球第一期原价 399 ,目前属于试运营,早鸟价 169 ,每超过50人涨价10元,星球马上要来一波大的涨价,如果你还在犹豫,可能最后就要以 更高价格加入了 。。

    早就是优势。建议大家尽早以便宜的价格加入!

    欢迎有需要的同学试试,如果本文对您有帮助,也请帮忙点个 赞 + 在看 啦!❤️

    在 还有更多优质项目系统学习资源,欢迎分享给其他同学吧!

    你还有什 么想要补充的吗?

    免责声明:本文内容来源于网络,文章版权归原作者所有,意在传播相关技术知识&行业趋势,供大家学习交流,若涉及作品版权问题,请联系删除或授权事宜。

    技术君个人微信

    添加技术君个人微信即送一份惊喜大礼包

    → 技术资料共享

    → 技术交流社群

    --END--

    往日热文:

    Python程序员深度学习的「四大名著」:

    这四本书着实很不错!我们都知道现在机器学习、深度学习的资料太多了,面对海量资源,往往陷入到「无从下手」的困惑出境。而且并非所有的书籍都是优质资源,浪费大量的时间是得不偿失的。给大家推荐这几本好书并做简单介绍。

    获得方式:

    1.扫码关注本公众号

    2.后台回复关键词:名著

    ▲长按扫描关注,回复名著即可获取