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

如何用UI Automation库获取选中内容并替换指定文本(.NET7 WinForms)

解决方案

要实现仅替换焦点控件的选中文本,你可以利用TextPatternRange的ReplaceText方法,这是UI Automation专门针对文本区域编辑的原生API,无需依赖剪贴板或复杂WinAPI。

修改后的代码示例

private void ReplaceSelectedText(string replacementText)
{
    try
    {
        var focusedElement = AutomationElement.FocusedElement;
        if (focusedElement == null) return;

        if (focusedElement.TryGetCurrentPattern(TextPattern.Pattern, out var patternObj))
        {
            var textPattern = (TextPattern)patternObj;
            var selectedRanges = textPattern.GetSelection();
            
            // 遍历所有选中区域,兼容富文本控件的多段选中场景
            foreach (var range in selectedRanges)
            {
                // 替换当前选中区域的文本
                range.ReplaceText(replacementText);
            }
        }
        // 兼容极少数仅支持ValuePattern的老旧控件,此逻辑会替换全部文本,按需启用
        // else if (focusedElement.TryGetCurrentPattern(ValuePattern.Pattern, out var valuePatternObj))
        // {
        //     var valuePattern = (ValuePattern)valuePatternObj;
        //     valuePattern.SetValue(replacementText);
        // }
    }
    catch (Exception ex)
    {
        Console.WriteLine($"替换失败: {ex.Message}\n{ex.StackTrace}");
    }
}

关键说明

  • 核心逻辑:TextPatternRange.ReplaceText直接对选中的文本区域进行修改,支持绝大多数标准文本控件(包括记事本、浏览器输入框、Office系列控件等)。
  • 多选中区域处理:遍历GetSelection()返回的所有范围,覆盖富文本类控件的多段选中场景。
  • 兼容性处理:针对极少数不支持TextPattern的老旧控件,可选择回退到全量文本替换,但这不符合"仅替换选中内容"的需求,可根据实际场景决定是否启用。

使用方式

调用时传入目标替换文本即可:

ReplaceSelectedText("你的替换内容");

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 09:41:32