public List <GetResults> GetWidgetsByName(string widgetName, double secondsToWait = 0, SearchRegion searchRegion = null) { if (secondsToWait > 0) { bool foundWidget = WaitForName(widgetName, secondsToWait); if (!foundWidget) { return(null); } } List <GetResults> namedWidgetsInRegion = new List <GetResults>(); for (int i = SystemWindow.AllOpenSystemWindows.Count - 1; i >= 0; i--) { SystemWindow systemWindow = SystemWindow.AllOpenSystemWindows[i]; if (searchRegion != null) // only add the widgets that are in the screen region { List <GuiWidget> namedWidgets = new List <GuiWidget>(); systemWindow.FindNamedChildrenRecursive(widgetName, namedWidgets); foreach (GuiWidget namedWidget in namedWidgets) { if (namedWidget.ActuallyVisibleOnScreen()) { RectangleDouble childBounds = namedWidget.TransformToParentSpace(systemWindow, namedWidget.LocalBounds); ScreenRectangle screenRect = SystemWindowToScreen(childBounds, systemWindow); ScreenRectangle result; if (ScreenRectangle.Intersection(searchRegion.ScreenRect, screenRect, out result)) { namedWidgetsInRegion.Add(new GetResults() { widget = namedWidget, containingSystemWindow = systemWindow, }); } } } } else // add every named widget found { List <GuiWidget> namedWidgets = new List <GuiWidget>(); systemWindow.FindNamedChildrenRecursive(widgetName, namedWidgets); foreach (GuiWidget namedWidget in namedWidgets) { if (namedWidget.ActuallyVisibleOnScreen()) { namedWidgetsInRegion.Add(new GetResults() { widget = namedWidget, containingSystemWindow = systemWindow, }); } } } } return(namedWidgetsInRegion); }