UIElement:控件交互与属性类
UIElement 是对 Windows UI 控件的封装。当你通过 Selector 找到目标后,会得到一个 UIElement 实例,通过它可以实现点击、输入、截图及获取控件状态。
1. 导入模块
通常 UIElement 是通过 Selector 查找返回的,但你也可以手动导入用于类型声明。
# 导入 UI 元素类
from ascript.windows.window import UIElement
2. 实例方法(动作交互)
🖱️ 元素点击 click()
触发控件的点击动作。
代码块:
# 执行点击操作
ui_element.click(simulate=False)
参数详解:
- simulate (bool):
False: (默认/推荐) 尝试使用底层指令(Invoke/Toggle)直接触发。这种方式不移动鼠标,不干扰用户,且在窗口被遮挡时通常也有效。True: 强制使用物理模拟。会将鼠标指针移动到元素中心并执行物理点击。
⌨️ 文本输入 input()
向控件(如输入框)写入文字。
代码块:
# 向控件输入文本
ui_element.input(text, simulate=False)
参数详解:
- text (str): 要输入的字符串内容。
- simulate (bool):
False: (默认) 使用底层ValuePattern直接设置值,速度极快且不需要焦点。True: 先模拟点击元素获取焦点,然后通过键盘 敲击(SendKeys)方式输入文字。
📸 局部截图 capture()
仅捕获该控件所在区域的画面。
代码块:
# 捕获控件截图
ui_element.capture(save_path=None)
参数详解:
- save_path (str): 图片保存的本地路径(如
"C:/ele.png")。若为None则不保存文件,直接返回 Pillow Image 对象。
3. 实例属性(状态查询)
你可以通过 ui_element.属性名 直接获取控件的各项实时信息。
| 属性 | 返回类型 | 说明 |
|---|---|---|
| name | str | 控件的名称 (Name) |
| type | str | 控件的类型名 (ControlTypeName) |
| value | str | 获取控件当前显示的文本值或内容 |
| res_id | str | 控件的资源 ID (AutomationId) |
| class_name | str | 控件的系统类名 (ClassName) |
| handle | int | 控件的原生窗口句柄 (HWND) |
| center | tuple | 元素中心点在窗口内的相对坐标 (x, y) |
| relative_rect | tuple | 相对窗口左上角的矩形区域 (left, top, right, bottom) |
| is_visible | bool | 控件当前是否在屏幕内可见 |
| is_enabled | bool | 控件是否处于启用(可交互)状态 |
| is_clickable | bool | 控件是否支持点击相关的底层协议 |
| child_count | int | 当前元素拥有的直接子节点数量 |
| depth | int | 该元素在 UI 树中所处的深度等级 |
💡 案例演示
from ascript.windows.ui import Selector
# 1. 找到一个按钮并点击
btn = Selector(title="我的应用").name("登录").find()
if btn:
# 优先尝试后台点击
btn.click()
# 2. 找到输入框并读取/设置值
edit = Selector(title="我的应用").type("EditControl").find()
if edit:
print(f"当前输入框内容是: {edit.value}")
edit.input("新内容")
# 3. 截图并获取坐标
icon = Selector(title="我的应用").res_id("UserIcon").find()
if icon:
icon.capture("icon.png")
cx, cy = icon.center
print(f"图标中心坐标: {cx}, {cy}")