pywinauto

安装量: 123
排名: #6945

安装

npx skills add https://github.com/malue-ai/dazee-small --skill pywinauto

Windows UI 自动化(pywinauto) 通过 pywinauto 操作任意 Windows 桌面应用:发现窗口、检查控件、点击按钮、输入文字、读取内容。 支持两种后端:Win32 API(传统应用)和 MS UI Automation(现代应用)。 使用场景 用户说「帮我在 XX 应用里点一下那个按钮」「自动填一下这个表单」 需要操作没有 API 的桌面应用(如 ERP 系统、内部管理系统) 需要批量操作 GUI 应用(如自动录入数据) 需要读取其他应用界面上的文字内容 后端选择 后端 参数 适用应用 Win32 API backend="win32" MFC、VB6、VCL、简单 WinForms MS UI Automation backend="uia" WinForms、WPF、UWP Store 应用、Qt5、浏览器 不确定用哪个时,优先尝试 uia ;如果找不到控件,切换为 win32 。 命令参考 连接到已有应用 from pywinauto import Application

方式 1:通过窗口标题连接

app

Application ( backend = "uia" ) . connect ( title = "记事本" , timeout = 10 )

方式 2:通过进程名连接

app

Application ( backend = "uia" ) . connect ( path = "notepad.exe" )

方式 3:通过进程 ID 连接

app

Application ( backend = "uia" ) . connect ( process = 12345 ) 启动新应用 from pywinauto import Application app = Application ( backend = "uia" ) . start ( "notepad.exe" )

等待窗口出现

app . window ( title_re = ".记事本." ) . wait ( "ready" , timeout = 10 ) 发现窗口和控件

列出所有顶层窗口

from pywinauto import Desktop windows = Desktop ( backend = "uia" ) . windows ( ) for w in windows : print ( f" { w . window_text ( ) } — { w . class_name ( ) } " )

打印窗口控件树(调试用)

dlg

app . window ( title_re = ".记事本." ) dlg . print_control_identifiers ( ) 点击按钮和菜单 dlg = app . window ( title = "记事本" )

点击菜单

dlg . menu_select ( "文件->打开" )

点击按钮(通过文本匹配)

dlg . child_window ( title = "确定" , control_type = "Button" ) . click ( )

点击按钮(通过 auto_id)

dlg . child_window ( auto_id = "btnSubmit" ) . click ( ) 输入文字 dlg = app . window ( title = "记事本" )

输入到编辑框

edit

dlg . child_window ( control_type = "Edit" ) edit . set_text ( "要输入的内容" )

模拟键盘输入(支持特殊键)

edit . type_keys ( "Hello{ENTER}World" , with_spaces = True )

特殊键:{ENTER} {TAB} {ESC} {DELETE} {BACKSPACE}

修饰键:^ = Ctrl, % = Alt, + = Shift

例:Ctrl+A = ^a, Ctrl+Shift+S = ^+s

读取界面内容 dlg = app . window ( title = "记事本" )

读取文本框内容

content

dlg . child_window ( control_type = "Edit" ) . window_text ( )

读取列表项

listbox

dlg . child_window ( control_type = "List" ) items = [ item . window_text ( ) for item in listbox . children ( ) ]

读取表格

table

dlg . child_window ( control_type = "Table" ) for row in table . children ( ) : cells = [ c . window_text ( ) for c in row . children ( ) ] print ( " | " . join ( cells ) ) 等待与同步

等待窗口出现

dlg

app . window ( title = "保存" ) . wait ( "visible" , timeout = 10 )

等待窗口消失

app . window ( title = "加载中..." ) . wait_not ( "visible" , timeout = 30 )

等待控件可用

dlg . child_window ( title = "提交" ) . wait ( "enabled" , timeout = 5 ) 窗口管理 dlg = app . window ( title = "记事本" )

最大化 / 最小化 / 还原

dlg . maximize ( ) dlg . minimize ( ) dlg . restore ( )

移动和调整大小

dlg . move_window ( x = 100 , y = 100 , width = 800 , height = 600 )

置顶

dlg . set_focus ( )

关闭

dlg . close ( ) 滚动 from pywinauto import mouse

向下滚动 3 格(在指定坐标位置)

mouse . scroll ( coords = ( 500 , 400 ) , wheel_dist = - 3 )

向上滚动 5 格

mouse . scroll ( coords = ( 500 , 400 ) , wheel_dist = 5 )

在控件内滚动(先获取控件位置)

rect

dlg . child_window ( control_type = "List" ) . rectangle ( ) mouse . scroll ( coords = ( rect . mid_point ( ) ) , wheel_dist = - 3 ) 鼠标坐标操作 from pywinauto import mouse

移动鼠标到坐标

mouse . move ( coords = ( 500 , 300 ) )

在指定坐标左键点击

mouse . click ( coords = ( 500 , 300 ) )

右键点击

mouse . right_click ( coords = ( 500 , 300 ) )

双击

mouse . double_click ( coords = ( 500 , 300 ) ) 拖拽 from pywinauto import mouse

拖拽:从 (100,200) 到 (300,400)

mouse . press ( coords = ( 100 , 200 ) ) mouse . move ( coords = ( 300 , 400 ) ) mouse . release ( coords = ( 300 , 400 ) ) 典型工作流 1. 用 Desktop().windows() 列出当前打开的窗口 2. 用 app.connect() 连接到目标应用 3. 用 dlg.print_control_identifiers() 查看控件树 4. 根据控件类型和属性定位目标元素 5. 执行操作(click / set_text / type_keys / scroll) 6. 读取结果或等待操作完成 安全规则 操作前必须 HITL 确认 :告知用户即将操作哪个应用的哪个控件 不自动关闭用户文档 :不调用未保存文档的 close() 不操作管理员窗口 :跳过 UAC 弹窗和系统设置 操作失败时截图反馈 :让用户看到当前界面状态 每步操作间隔 0.5 秒 :避免操作过快导致 UI 来不及响应

返回排行榜