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);
        }