Как получить значение счетчика из AutomationElement через RangeValuePattern?

Я пытаюсь получить значение в счетчике из него, чтобы проверить, что оно было введено правильно через AutomationElement в C#. То, что я сейчас делаю, - это попытка получить это через TryGetCurrentPattern как показано ниже, однако он возвращает только 0,0 для значения, несмотря на то, что в счетчике отображается другое значение (например, 1).

if (spinnerAutoEle.TryGetCurrentPattern(RangeValuePattern.Pattern, out pattern)) 
{
    var valueRangePattern = (RangeValuePattern)pattern;
    return valueRangePattern.Current.Value;
}

Кроме того, я заметил, глядя на valueRangePattern.Current поле для максимальных и минимальных значений также всегда равно 0.0, несмотря на ограничение счетчика. Я также пытался получить ValuePattern из счетчика, но это не будет входить в оператор if if (spinnerAutoEle.TryGetCurrentPattern(ValuePattern.Pattern, out pattern)), Можно ли таким образом получить числовое значение из Spinner?

2 ответа

Windows Forms не поддерживает автоматизацию для элементов управления счетчиками (NumericUpDown). На самом деле он поддерживает, но дает неправильные значения. Используйте такую ​​библиотеку, как FlaUI, чтобы получить значение счетчика. Это делается с помощью сообщений Win32 (SendMessage WM_GETTEXT в окно редактирования внутри счетчика). С наилучшими пожеланиями.

Я бы посоветовал проверить структуру дерева автоматизации пользовательского интерфейса для счетчика, используя инструмент Inspect, поставляемый с Windows SDK. Я обнаружил, что в некоторых случаях (например, в некоторых реализациях Winforms элементов управления вращением) и в зависимости от того, используете ли вы управляемую или собственную версию UI Automation, элемент управления вращением может быть создан из поля редактирования и двух кнопок в автоматизации. дерево, где к фактическому значению обращаются через поле редактирования и шаблон Значения. Я понимаю, что это очень поздний ответ, но, возможно, он может кому-то помочь.

Идентификатор спиннера в обработчик, после того как обработчик получит заголовок главного окна счетчика, так как вы получаете заголовок главного окна, используя идентификатор процесса, так как у него есть идентификатор, поэтому конвертируйте дескриптор в элемент или используйте этот идентификатор для получения текста выигрыша, который даст вам текст счетчика, процесс для основной выигрышный титул основан на идентификаторе, на самом деле спиннер тоже имеет идентификатор, а здравый смысл - это текст заголовок

Другие вопросы по тегам