C# 向无InvokePattern的AutomationElement发送单击

C# 向无InvokePattern的AutomationElement发送单击,c#,wpf,automation,automationelement,C#,Wpf,Automation,Automationelement,使用AutomationElement,是否有任何方法可以将单击发送到TabItem,而无需移动鼠标和模拟单击AutomationElement对我来说仍然是新的-据我所知,除非它支持InvokePattern(该选项卡项不支持),否则您必须找到控件位置并模拟鼠标。我的代码正在运行(见下文)——我只是好奇这是否是我的选择 AutomationElement tabControl = GetControl(window, "NOTEBOOK"); AutomationElement tabGene

使用
AutomationElement
,是否有任何方法可以将单击发送到
TabItem
,而无需移动鼠标和模拟单击
AutomationElement
对我来说仍然是新的-据我所知,除非它支持
InvokePattern
(该选项卡项不支持),否则您必须找到控件位置并模拟鼠标。我的代码正在运行(见下文)——我只是好奇这是否是我的选择

AutomationElement tabControl = GetControl(window, "NOTEBOOK");
AutomationElement tabGeneral = GetControl(tabControl, "FM_STAFF_SUB_P1");

AutomationElementCollection tabs = GetAllTabs(window, tabGeneral);

System.Windows.Point p = tabs[1].GetClickablePoint();

MoveMouse((int)p.X, (int)p.Y);
ClickMouse();
多谢各位

  • 尝试
    tab.SetFocus()
  • 获取所有受支持的模式(
    tab.GetSupportedPatterns()
    ),然后查看此选项卡实现支持哪些模式。它应该支持SelectionItemPattern,所以使用:
    ((SelectionItemPattern)tab.GetCurrentPattern(SelectionItemPattern.Pattern)).Select()
  • 使用
    SendKeys
    到窗口导航选项卡(大多数情况下会有一个热键在它们之间导航。如果选择了选项卡,您可以在每次导航后检查组合
  • 如果以上都失败了,我想鼠标点击是你唯一的选择

  • 我在向选项卡项添加热键时遇到了类似的问题。在我的情况下,仅选择选项卡项将使其具有焦点,但在动态生成选项卡时不会显示选项卡的内容。除非我误解了您的问题,否则此示例将模拟使用TabItemAutomationPeer单击选项卡项

            //get the TabItem
          TabItem tabItem = (TabItem)sender; //or however you are getting it.
        
            //get the TabControl
          TabControl tabControl = UIHelper.FindLogicalParent<TabControl>(tabItem); //or however you are getting it.
          
            //do that magic
          tabItem.IsSelected = true; 
          TabControlAutomationPeer tabControlAutomationPeer = new TabControlAutomationPeer(tabControl);
          TabItemAutomationPeer tabItemAutomationPeer = new TabItemAutomationPeer(tabItem, tabControlAutomationPeer);
          tabItemAutomationPeer.SetFocus(); //works like a click
    
    //获取选项卡项
    TabItem TabItem=(TabItem)sender;//或以何种方式获取它。
    //获得控制权
    TabControl TabControl=UIHelper.FindLogicalParent(tabItem);//或以何种方式获取它。
    //施展魔法
    tabItem.IsSelected=true;
    TabControlAutomationPeer TabControlAutomationPeer=新的TabControlAutomationPeer(tabControl);
    TabItemAutomationPeer TabItemAutomationPeer=新的TabItemAutomationPeer(tabItem,tabControlAutomationPeer);
    tabItemAutomationPeer.SetFocus();//就像单击一样工作
    
    Wooo blast来自过去!您的解决方案也很糟糕。我尝试了越来越多的东西,终于能够选择选项卡,因此它加载了选项卡页面-但随后我无法单击其上的控件。它给了我错误,如“控件xxx不存在”我最终只是移动了鼠标。我还应该补充一点,我在第三方应用程序上点击了标签,所以谁知道它崩溃的确切原因。