# pywinauto **Repository Path**: rcliang/pywinauto ## Basic Information - **Project Name**: pywinauto - **Description**: Windows自动化 - **Primary Language**: Python - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 2 - **Created**: 2024-08-13 - **Last Updated**: 2025-05-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README #### 1、课程介绍 ``` 主要讲解python的第三方包pywinauto的使用,通过课程学习可以快速掌握Windows Gui的自动化操作 ``` #### 2、虚拟环境安装与创建 ```python pip install virtualenv -i https://pypi.mirrors.ustc.edu.cn/simple/ pip install virtualenvwrapper-win -i https://pypi.mirrors.ustc.edu.cn/simple/ mkvirtualenv +虚拟环境名称 rmvirtualenv +虚拟环境名称 workon +虚拟环境名称 ``` #### 3、pywinauto包介绍 介绍 一组用于Windows程序自动化的python包。 最简单的是,它允许您将鼠标和键盘操作发送到窗口对话框和控件 通过元素定位查找等方式获取元素坐标并且操作元素,通过他提供的包我们就可以对Windows程序进行自动化操作 ```python pip install pywinauto -i https://pypi.mirrors.ustc.edu.cn/simple/ ``` #### 4、打开指定应用程序 有两种方法: ​ 方法一、通过快捷操作打开程序 ​ 方法二、通过安装路径打开程序 ```python from pywinauto.application import Application # 打开指定程序 # 方法一、打开Windows自带的记事本(通过快捷操作打开程序) app = Application(backend="uia").start("notepad.exe") # 方法二、打开Windows微信(通过安装路径打开程序) app = Application(backend="uia").start(r"C:\Windows\system32\notepad.exe") ``` #### 5、连接已打开的程序 有两种方法: ​ 方法一、通过程序标题 ​ 方法二、通过程序后台进程pid 演示如何连接已打开的某信 ```python from pywinauto.application import Application # 连接已打开的程序 # 方法一、通过程序标题 app = Application(backend="uia").connect(title="微信") # 获取微信的元素 dlg = app["微信"] # 设置窗口默认状态(显示程序) dlg.restore() # 方法二、通过程序后台进程pid app = Application(backend="uia").connect(process=2600) # 获取微信的元素 dlg = app["微信"] # 设置窗口默认状态(显示程序) dlg.restore() ``` #### 6、获取GUI元素工具介绍 ​ 1、ViewWizardSetup ​ 被称为"窗口信息查看精灵", 是一个强大的工具它的主要职责是深入剖析和操控窗口的底层信息。 ​ 通过ViewWizard,用户能够轻松获取到窗口的句柄、控件类名、标题以及窗口的风格等关键数据。 ​ 2、UISpy ​ UISpy 工具,是开发人员和测试人员将能够查看应用程序的用户界面(UI)元素并与之交互。可以快速地 帮助我们识别Windows应用程序的元素属性。主要两点他会展示定位元素的树形结构且同时高亮显示定位 元素的区域 #### 7、获取指定窗口元素 ​ 以字典的形式获取窗口元素 ```python # 连接登录的微信 app = Application(backend="uia").connect(title="微信") # 获取微信的元素 dlg = app["微信"] dlg.print_control_identifiers() ``` #### 8、配置程序窗口最大化 ​ 通过maximize方法设置程序窗口最大化 ```python # 连接登录的微信 app = Application(backend="uia").connect(title="微信") # 获取微信的元素 dlg = app["微信"] # 设置窗口最大化 dlg.maximize() ``` #### 9、配置程序窗口最小化 ​ 通过minimize方法设置程序窗口最小化 ```python # 连接登录的微信 app = Application(backend="uia").connect(title="微信") # 获取微信的元素 dlg = app["微信"] # 设置窗口最小化 dlg.minimize() ``` #### 10、配置程序恢复窗口默认状态 ​ 通过restore方法设置程序窗口默认状态 ```python # 连接登录的微信 app = Application(backend="uia").connect(title="微信") # 获取微信的元素 dlg = app["微信"] # 设置窗口默认状态 dlg.restore() ``` #### 11、查看程序当前窗口的状态 ​ 通过get_show_state方法查询窗口的当前状态 ```python # 连接登录的微信 app = Application(backend="uia").connect(title="微信") # 获取微信的元素 dlg = app["微信"] # 查询窗口状态:最大化:1 正常:0 status = dlg.get_show_state() print(status) ``` #### 12、关闭程序窗口 ​ 通过close方法关闭窗口 ```python # 连接登录的微信 app = Application(backend="uia").connect(title="微信") # 获取微信的元素 dlg = app["微信"] # 关闭窗口 dlg.close() ``` #### 13、获取元素的坐标 ​ 通过rectangle方法获取元素坐标 ```python # 连接登录的微信 app = Application(backend="uia").connect(title="微信") # 获取微信的元素 dlg = app["微信"] #获取元素的坐标 rect = dlg.rectangle() print(rect) ``` #### 14、获取元素的框高 ​ 通过rectangle方法的width、height获取元素的宽高 ```python # 连接登录的微信 app = Application(backend="uia").connect(title="微信") # 获取微信的元素 dlg = app["微信"] #获取元素的宽高 height_z = dlg.child_window(title="通讯录", control_type="Button").rectangle().height() width_z = dlg.child_window(title="通讯录", control_type="Button").rectangle().width() print(height_z,width_z) ``` #### 15、点击元素方法 ​ 通过click_input方法进行点击元素 ```python # 连接登录的微信 app = Application(backend="uia").connect(title="微信") # 获取微信的元素 dlg = app["微信"] liaotian = dlg.child_window(title="搜索", control_type="Edit") # 点击元素 liaotian.click_input() ``` #### 16、键盘输入方法 ​ type_keys键盘输入方法 ​ send_keys键盘回车方法 ```python # 连接登录的微信 app = Application(backend="uia").connect(title="微信") # 获取微信的元素 dlg = app["微信"] liaotian = dlg.child_window(title="搜索", control_type="Edit") liaotian.click_input() # 输入内容 dlg.type_keys('李先生', with_spaces=True) ``` #### 17、列表操作实例 ```python # 连接登录的微信 app = Application(backend="uia").connect(title="微信") # 获取微信的元素 dlg = app["微信"] # 获取列表,先定位到联系人位置 elementList = dlg.child_window(title="联系人", control_type="List") # 获取列表的元素 infoNameList = elementList.items() print(infoNameList) ``` #### 18、列表滚动操作实例 ```python # 连接登录的微信 app = Application(backend="uia").connect(title="微信") # 获取微信的元素 dlg = app["微信"] # 选择列表然后进行滚动 elementList = dlg.child_window(title="联系人", control_type="List") # 滚动列表 liaotian = elementList.rectangle() # 滚动滚动列表coords表示鼠标偏移坐标位置,wheel_dist整数是往上滚,负数是往下滚,滚动距离等数字*120 mouse.scroll(coords=(liaotian.left + 20, liaotian.top + 20), wheel_dist=-4) ```