/// <inheritdoc />
        public override IList<Window> GetChildWindows(WindowCriteriaConstraint constraint)
        {
            IList<Window> childWindowList = new List<Window>();
            if (this.ChildEnumerationMethod == WindowEnumerationMethod.WindowManagementApi)
            {
                MsWindowsEnumerator enumerator = new MsWindowsEnumerator();
                childWindowList = enumerator.GetChildWindows(this.handle, constraint);
            }
            else
            {
                if (this.AccessibleObject != null)
                {
                    IList<AssistiveTechnologyObject> accessibleChildren = this.AccessibleObject.GetChildrenByRole(AccessibleRole.AnyRole, true, true);
                    foreach (AssistiveTechnologyObject accessibleChild in accessibleChildren)
                    {
                        int itemIndex = accessibleChildren.IndexOf(accessibleChild);
                        MsWindowsWindow foundWindow = new MsWindowsWindow((MsaaObject)accessibleChild, this.handle, itemIndex);
                        if (constraint(foundWindow))
                        {
                            childWindowList.Add(foundWindow);
                        }
                        else
                        {
                            foundWindow.Dispose();
                        }
                    }
                }
            }

            return childWindowList;
        }
 /// <summary>
 /// Gets all top-level windows in the system.
 /// </summary>
 /// <returns>A list of <see cref="Window"/> objects representing the top-level windows in the system.</returns>
 public static IList<Window> GetAllTopLevelWindows()
 {
     MsWindowsEnumerator enumerator = new MsWindowsEnumerator();
     IList<Window> allWindowList = enumerator.GetWindows(window => true);
     return allWindowList;
 }