Как получить значение счетчика из 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, элемент управления вращением может быть создан из поля редактирования и двух кнопок в автоматизации. дерево, где к фактическому значению обращаются через поле редактирования и шаблон Значения. Я понимаю, что это очень поздний ответ, но, возможно, он может кому-то помочь.
Идентификатор спиннера в обработчик, после того как обработчик получит заголовок главного окна счетчика, так как вы получаете заголовок главного окна, используя идентификатор процесса, так как у него есть идентификатор, поэтому конвертируйте дескриптор в элемент или используйте этот идентификатор для получения текста выигрыша, который даст вам текст счетчика, процесс для основной выигрышный титул основан на идентификаторе, на самом деле спиннер тоже имеет идентификатор, а здравый смысл - это текст заголовок