[英]How to get text out of a ListView or similar control using UI Automation?
[英]How to get selection and replace it with certain text using UI Automation Lib?
因此,我有一个运行在 .NET 7.0 上的 WinForms 应用程序,我需要从聚焦控件中进行选择(这应该适用于支持文本选择的任何应用程序)并将其替换为特定文本。 问题是我可以替换该字段中的所有文本,但我不能只替换我需要的文本部分。
private void GetSelectedText()
{
try
{
var element = AutomationElement.FocusedElement;
if (element != null)
{
object pattern;
object valuePattern;
// Here I can get the selected text from almost any application.
if (element.TryGetCurrentPattern(TextPattern.Pattern, out pattern))
{
var tp = (TextPattern)pattern;
var sb = new StringBuilder();
foreach (var r in tp.GetSelection())
{
sb.AppendLine(r.GetText(-1));
}
// Debug info:
MessageBox.Show(sb.ToString());
}
// And this code sets value of the focused control to "aaaaaaa".
if (element.TryGetCurrentPattern(ValuePattern.Pattern, out valuePattern))
{
((ValuePattern)valuePattern).SetValue("aaaaaaa");
}
}
}
catch (Exception ex)
{
// Debug info:
Console.WriteLine(ex.Message, ex.StackTrace);
}
}
我还尝试了 WinAPI 调用来复制和粘贴值,但我不知道如何在不使用剪贴板或编写大量代码的情况下替换文本。
如果你能帮我解决这个问题,我将不胜感激。
文本模式不提供任何修改文本的方法,值模式也只允许设置整个值。 您可以做的是通过直接键盘输入修改选择。 这是我尝试过的并且按预期工作:
var element = AutomationElement.FocusedElement;
if (element != null)
{
if (element.TryGetCurrentPattern(TextPattern.Pattern, out object pattern))
{
var tp = (TextPattern)pattern;
var selection = tp.GetSelection().FirstOrDefault();
if(selection != null)
{
SendKeys.SendWait("XXXXXX");
}
}
}
有关更多信息,请查看TextPattern 概述
TextPattern 类不提供插入或修改文本的方法。 但是,根据控件的不同,这可以通过 UI Automation ValuePattern 或通过直接键盘输入来完成。 有关示例,请参阅TextPattern 插入文本示例。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.