在 windows 自动化中使用部分 NameProperty 查找 windows 控件

Find a windows control using partial NameProperty in windows automation

我正在尝试使用部分 NameProperty 识别 windows 静态文本控件。这是我的代码:

// Get a reference to the window
AutomationElement epoWindow = AutomationElement.RootElement.FindFirst(TreeScope.Children, new PropertyCondition(AutomationElement.ClassNameProperty, "MsiDialog"));
// Get a reference to the control
AutomationElement epoControl = epoWindow.FindFirst(TreeScope.Descendants, new PropertyCondition(AutomationElement.NameProperty, controlText));

我目前需要完整的 controlText 字符串才能正常工作,但我想搜索该字符串的一部分和 return 找到的任何控件。 我该怎么做呢? 谢谢, 约翰

您可以使用预定义的 TrueCondition 迭代子集合,如下所示:

  foreach(AutomationElement child in epoWindow.FindAll(TreeScope.Subtree, Condition.TrueCondition))
  {
      if (child.Current.Name.Contains("whatever"))
      {
          // do something
      }
  }

PS:如果您不想破坏应用程序的性能(如果它具有较大的子层次结构)或无限期地等待,则需要谨慎选择 TreeScope...