如何通过rangevalupattern从AutomationElement中获取旋转器的值

本文关键字:旋转 获取 何通过 rangevalupattern AutomationElement | 更新日期: 2023-09-27 18:02:10

我试图从它中获得旋转器中的值,以检查它是否通过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))。是否有可能以这种方式从旋转器中获得数值?

如何通过rangevalupattern从AutomationElement中获取旋转器的值

Windows窗体不支持旋转控件(NumericUpDown)的自动化。实际上,它支持,但是它给出了错误的值。使用FlaUI之类的库来获取旋转器的值。它是用Win32消息完成的(SendMessage WM_GETTEXT到旋转器内的编辑窗口)。致以最亲切的问候。

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

spinner id到handler再到handler获取spinner主Windows标题就像你使用进程id获取主Windows标题一样soinner有id所以将句柄转换为元素或者使用id来获取meinwin文本这样就会得到spinner文本,主win标题的进程是基于id的实际上spinner也有id一般来说,它的文本是title