public override List <IUiElement> SearchForElements(SearcherTemplateData searchData) { if (null == ResultCollection) { return(new List <IUiElement>()); } if (null == searchData) { return(ResultCollection); } var data = searchData as ControlSearcherData; if (null == data) { return(ResultCollection); } if (null == data.InputObject) { return(ResultCollection); } foreach (IUiElement inputObject in data.InputObject) { int processId = 0; #region checking processId if (inputObject != null && // 20140312 // (int)inputObject.Current.ProcessId > 0) { (int)inputObject.GetCurrent().ProcessId > 0) { // 20140312 // processId = inputObject.Current.ProcessId; processId = inputObject.GetCurrent().ProcessId; } #endregion checking processId // 20130204 // don't change the order! (text->exact->wildcard->win32 to win32->text->exact->wildcard) #region text search if (0 == ResultCollection.Count) { if (!notTextSearch && !data.Win32) { UsedSearchType = UsedSearchType.Control_TextSearch; ResultCollection.AddRange( SearchByContainsTextViaUia( inputObject, conditionsForTextSearch)); } } #endregion text search #region text search Win32 if (0 == ResultCollection.Count) { if (!notTextSearch && data.Win32) { UsedSearchType = UsedSearchType.Control_TextSearchWin32; var controlFromWin32Provider = AutomationFactory.GetObject <ControlFromWin32Provider>(); controlFromWin32Provider.SearchData = data; controlFromWin32Provider.HandleCollector = AutomationFactory.GetObject <HandleCollector>(); ResultCollection.AddRange( SearchByContainsTextViaWin32( inputObject, controlFromWin32Provider)); } } #endregion text search Win32 #region exact search if (0 == ResultCollection.Count && notTextSearch && !data.Regex) { if (!Preferences.DisableExactSearch && !data.Win32) { UsedSearchType = UsedSearchType.Control_ExactSearch; ResultCollection.AddRange( SearchByExactConditionsViaUia( inputObject, data.SearchCriteria, conditionsForExactSearch)); } } #endregion exact search #region wildcard search if (0 == ResultCollection.Count && notTextSearch && !data.Regex) { if (!Preferences.DisableWildCardSearch && !data.Win32) { UsedSearchType = UsedSearchType.Control_WildcardSearch; ResultCollection.AddRange( SearchByWildcardOrRegexViaUia( inputObject, data, // 20140206 // UiElement.RootElement, conditionsForWildCards, true)); } } #endregion wildcard search #region Regex search if (0 == ResultCollection.Count && notTextSearch && data.Regex) { if (!Preferences.DisableWildCardSearch && !data.Win32) { UsedSearchType = UsedSearchType.Control_RegexSearch; ResultCollection.AddRange( SearchByWildcardOrRegexViaUia( inputObject, data, conditionsForWildCards, false)); } } #endregion Regex search #region Win32 search if (0 == ResultCollection.Count && notTextSearch && !data.Regex) { if (!Preferences.DisableWin32Search && data.Win32) { UsedSearchType = UsedSearchType.Control_Win32Search; var handleCollector = AutomationFactory.GetObject <HandleCollector>(); ResultCollection.AddRange( SearchByWildcardViaWin32( inputObject, data, handleCollector)); } } // FindWindowEx #endregion Win32 search } return(ResultCollection); }
internal IEnumerable <IUiElement> SearchByWildcardViaWin32( IUiElement inputObject, ControlSearcherData data, HandleCollector handleCollector) { var tempListWin32 = new List <IUiElement>(); if (!string.IsNullOrEmpty(data.Name) || !string.IsNullOrEmpty(data.Value)) { var controlFrom32Provider = AutomationFactory.GetObject <ControlFromWin32Provider>(); var singleControlSearcherData = new SingleControlSearcherData { InputObject = inputObject, Name = data.Name, Value = data.Value, AutomationId = data.AutomationId, Class = data.Class }; controlFrom32Provider.HandleCollector = handleCollector; tempListWin32.AddRange( controlFrom32Provider.GetElements( singleControlSearcherData.ConvertSingleControlSearcherDataToControlSearcherTemplateData())); } var resultList = new List <IUiElement>(); foreach (IUiElement tempElement3 in tempListWin32) { bool goFurther = true; if (null != data.ControlType && 0 < data.ControlType.Length) { // 20140312 // goFurther &= !data.ControlType.Any(controlTypeName => String.Equals(tempElement3.Current.ControlType.ProgrammaticName.Substring(12), controlTypeName, StringComparison.CurrentCultureIgnoreCase)); goFurther &= !data.ControlType.Any(controlTypeName => String.Equals(tempElement3.GetCurrent().ControlType.ProgrammaticName.Substring(12), controlTypeName, StringComparison.CurrentCultureIgnoreCase)); } else { goFurther = false; } if (goFurther) { continue; } if (null == data.SearchCriteria || 0 == data.SearchCriteria.Length) { resultList.Add(tempElement3); } else { if (!TestControlWithAllSearchCriteria(data.SearchCriteria, tempElement3)) { continue; } resultList.Add(tempElement3); } } if (null != tempListWin32) { tempListWin32.Clear(); tempListWin32 = null; } return(resultList); }