You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用FlaUI在Paint的「另存为」对话框中设置字段值?

解决FlaUI操作Paint「另存为」对话框输入框的问题

错误原因

你遇到的SetValue方法不存在的问题,是因为FindAllDescendants返回的是通用的AutomationElement对象,而SetValue是TextBox类控件特有的方法,必须先将通用元素转换为TextBox类型才能调用。

修正步骤与代码

  1. 精确定位「另存为」对话框:原代码定位的是Paint主窗口,需要改为定位「另存为」对话框窗口
  2. 转换为TextBox控件:找到目标元素后,调用AsTextBox()方法转换为TextBox对象,再执行输入操作
  3. 增加空值检查:避免因未找到控件导致的报错

修正后的PowerShell代码:

Add-Type -Path C:\Users\sergi\assemblies\bin\Release\net48\publish\FlaUI.UIA3.dll

# 定位另存为对话框(根据系统语言调整标题,中文系统用「另存为」,英文用「Save As」)
$saveDialogTitle = '另存为'
$controlName = 'Name:'
$automation = [FlaUI.UIA3.UIA3Automation]::new()
$process = Get-Process | Where-Object {$_.MainWindowTitle -match 'Untitled - Paint'}
$app = [FlaUI.Core.Application]::Attach($process)

# 遍历所有顶级窗口,找到另存为对话框
foreach ($wnd in $app.GetAllTopLevelWindows($automation)) {
    if ($wnd.Title -match $saveDialogTitle) {
        # 找到Name:对应的输入控件,转为TextBox
        $inputElement = $wnd.FindAllDescendants() | Where-Object {$_.Name -eq $controlName}
        if ($inputElement -and $inputElement.Count -gt 0) {
            $textBox = $inputElement[0].AsTextBox()
            # 两种输入方式可选:SetValue或Enter文本
            $textBox.SetValue('Value Test')
            # 或者用Enter方法模拟键盘输入:$textBox.Enter('Value Test')
        }
        break # 找到对话框后退出循环
    }
}

# 清理资源
$automation.Dispose()

额外说明

  • 如果是英文系统,将$saveDialogTitle改为'Save As'
  • 除了SetValue,也可以用Enter方法模拟实际键盘输入,适合某些特殊控件场景
  • 始终记得在操作完成后调用Dispose()释放自动化资源,避免内存泄漏

内容的提问来源于stack exchange,提问作者sysOut

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 10:30:43