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

Я пытаюсь получить значение счетчика из него, чтобы проверить, правильно ли оно было введено через AutomationElement в С#. В настоящее время я пытаюсь вывести его через 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?


person KRJuggling    schedule 10.07.2015    source источник
comment
У тебя есть ответ из любого места, где я очень нуждаюсь сегодня?   -  person nouman arshad    schedule 24.06.2016
comment
@noumanarshad посмотри мой ответ   -  person o_weisman    schedule 28.06.2016


Ответы (3)


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

person Daniel Mocanu    schedule 13.12.2019

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

person o_weisman    schedule 28.06.2016
comment
после того, как обработчик получит заголовок главного окна счетчика, когда вы получите заголовок основного окна, используя идентификатор процесса, у soinner есть идентификатор, поэтому преобразуйте дескриптор в элемент или используйте этот идентификатор, чтобы получить текст mein win, который даст вам текст счетчика, процесс для основного заголовка выигрыша на основе идентификатора на самом деле счетчик тоже имеет идентификатор, и здравый смысл заключается в том, что его текст - это заголовок - person nouman arshad; 28.06.2016

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

person nouman arshad    schedule 28.06.2016