У меня есть небольшое приложение для Windows, на котором есть ряд меток. Это приложение будет глобальным, и есть вероятность, что текст на этих этикетках может быть усечен. Я пытаюсь автоматизировать определение усеченного текста на этих этикетках.
Для других элементов управления я могу использовать TextPattern.Pattern, с помощью которого я могу найти видимый текст и фактический текст внутри элемента управления. Но для меток (ControlType.text) TextPattern не поддерживается. Как найти видимый текст для этих ярлыков с помощью автоматизации пользовательского интерфейса.
Вот код, который я пробовал. Если я передаю тип управления как Document, он работает. Но с типом элемента управления Text это дает исключение неподдерживаемого шаблона.
private String TextFromSelection(AutomationElement target, Int32 length)
{
// Specify the control type we're looking for, in this case 'Document'
PropertyCondition cond = new PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.Text);
// target --> The root AutomationElement.
AutomationElement textProvider = target.FindFirst(TreeScope.Descendants, cond);
TextPattern textpatternPattern = textProvider.GetCurrentPattern(TextPattern.Pattern) as TextPattern;
if (textpatternPattern == null)
{
Console.WriteLine("Root element does not contain a descendant that supports TextPattern.");
return null;
}
var test = textpatternPattern.DocumentRange.GetText(-1).TrimEnd('\r');
var tpr = textpatternPattern.GetVisibleRanges();
var txt = tpr[0].GetText(-1);
return txt;
}