在Windows中,您可以使用Microsoft UI Automation来枚举并从另一个窗口的控件中获取文本。UI Automation是一个跨平台的API,它允许辅助技术和自动化工具与应用程序的UI元素进行交互。以下是一个简单的C#示例,演示如何枚举窗口中的控件并获取文本。
using System;
using System.Windows.Automation;
namespace UIAutomationExample
{
class Program
{
static void Main(string[] args)
{
// 获取目标窗口的AutomationElement
AutomationElement targetWindow = AutomationElement.RootElement.FindFirst(TreeScope.Children, new PropertyCondition(AutomationElement.NameProperty, "窗口标题"));
// 枚举窗口中的所有控件
foreach (AutomationElement control in targetWindow.FindAll(TreeScope.Descendants, Condition.TrueCondition))
{
// 获取控件的文本
object textPattern;
if (control.TryGetCurrentPattern(TextPattern.Pattern, out textPattern))
{
TextPattern textPatternInstance = (TextPattern)textPattern;
AutomationElement textElement = textPatternInstance.DocumentRange.GetEnclosingElement();
Console.WriteLine(textElement.Current.Name + ": " + textElement.Current.AutomationId);
}
}
}
}
}
在这个示例中,我们首先使用AutomationElement.RootElement.FindFirst
方法获取目标窗口的AutomationElement
。然后,我们使用FindAll
方法枚举窗口中的所有控件。对于每个控件,我们尝试获取TextPattern
,这是一个用于获取文本的模式。如果控件支持TextPattern
,我们可以使用DocumentRange.GetEnclosingElement()
方法获取文本所在的AutomationElement
,并打印其名称和自动化ID。
请注意,这个示例仅适用于支持UI Automation的应用程序。并非所有应用程序都支持UI Automation,因此这种方法可能无法在所有情况下工作。
领取专属 10元无门槛券
手把手带您无忧上云