/// <summary> /// ボタン群を検索する。 /// </summary> /// <param name="types">検索対象ボタン種別配列。</param> /// <returns>ボタン AutomationElement 配列。見つからなければ null 。</returns> private async Task <AutomationElement[]> FindButtons(params ButtonType[] types) { if (types == null) { throw new ArgumentNullException(nameof(types)); } var root = MakeElementFromHandle(this.MainWindowHandle); var buttonsRoot = FindFirstChildByAutomationId(root, @"c"); if (buttonsRoot == null) { return(null); } var results = new AutomationElement[types.Length]; try { await Task.Run( () => { // ボタン群取得 var buttons = buttonsRoot.FindAll( TreeScope.Children, new PropertyCondition( AutomationElement.ControlTypeProperty, ControlType.Button)); foreach (AutomationElement button in buttons) { // 子のテキストからボタン種別決定 var buttonText = FindFirstChildByControlType(button, ControlType.Text); if ( buttonText != null && NamedButtonTypes.TryGetValue( buttonText.Current.Name, out var type)) { var index = Array.IndexOf(types, type); if (index >= 0) { results[index] = button; } } } }); } catch { return(null); } // すべてのボタンが揃っているか確認 return(results.Any(b => b == null) ? null : results); }