【问题标题】:How to get the value of a spinner out of an AutomationElement through RangeValuePattern?如何通过 RangeValuePattern 从 AutomationElement 中获取微调器的值?
【发布时间】:2019-12-13 22:04:06
【问题描述】:

我正在尝试从中获取微调器中的值,以检查它是否通过 C# 中的 AutomationElement 正确输入。我目前正在尝试通过TryGetCurrentPattern 将其取出,如下所示,但是尽管在微调器中显示了不同的值(例如 1),但它仅返回 0.0。

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 中获取数值?

【问题讨论】:

  • 你有没有从我今天急需的任何地方得到答案
  • @noumanarshad 看到我的回答

标签: c# spinner ui-automation microsoft-ui-automation automationelement


【解决方案1】:

Windows 窗体不支持微调控件的自动化 (NumericUpDown)。实际上,它支持但它给你错误的值。使用像 FlaUI 这样的库来获取微调器的值。它是通过 Win32 消息完成的(SendMessage WM_GETTEXT 到微调器内的编辑窗口)。最好的问候。

【讨论】:

    【解决方案2】:

    我建议使用 Windows SDK 附带的检查工具检查微调器的 UI 自动化树的结构。我发现在某些情况下(例如微调控件的某些 Winforms 实现),并且取决于您使用的是 UI 自动化的托管版本还是本机版本,微调控件可能由一个编辑框和自动化中的两个按钮构成通过编辑框和值模式访问实际值的树。我意识到这是一个很晚的答案,但也许它可以帮助某人。

    【讨论】:

    • 在处理程序获取微调器主窗口标题后,当您使用进程 id 获得主窗口标题时,samilarly soinner have id 所以将句柄转换为元素或使用该 id 来获取 mein win 文本,这将为您提供微调器文本, 主赢标题的过程是基于 id 实际上 spinner 也有 id 和常识是 itys 文本是标题
    【解决方案3】:

    spinner id to handler after handler get the spinner main windows title as you get the main windows title using process id samilarly soinner have id so convert handle to element or using that id to get mein win text that will give you spinner text ,主赢标题的过程是基于 id 实际上 spinner 也有 id 并且常识是 itys 文本是标题

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-03
      • 2012-11-27
      • 1970-01-01
      • 2015-06-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多