C# 如何使用UIAutomation设置MDI子窗口的焦点

C# 如何使用UIAutomation设置MDI子窗口的焦点,c#,ui-automation,C#,Ui Automation,我们需要自动化一个旧的遗留应用程序。 它使用MDI窗口 我们正在使用,我可以成功地为每个MDI子窗口获取适当的AutomationElement。 我不能做的是把这个元素集中起来 下面是我尝试过的一些失败的示例代码: var desktop = AutomationElement.RootElement; var dolphin = desktop.FindFirst(TreeScope.Children, new Property

我们需要自动化一个旧的遗留应用程序。 它使用MDI窗口

我们正在使用,我可以成功地为每个MDI子窗口获取适当的AutomationElement。 我不能做的是把这个元素集中起来

下面是我尝试过的一些失败的示例代码:

        var desktop = AutomationElement.RootElement;
        var dolphin = desktop.FindFirst(TreeScope.Children,
                new PropertyCondition(AutomationElement.NameProperty,
                    "Dolphin for Windows",
                    PropertyConditionFlags.IgnoreCase));
        dolphin.SetFocus();

        var workspace = dolphin.FindFirst(TreeScope.Children,
                new PropertyCondition(AutomationElement.NameProperty,
                    "Workspace",
                    PropertyConditionFlags.None));

        var childWindow = workspace.FindFirst(TreeScope.Children, new
                PropertyCondition(AutomationElement.NameProperty, "Sharp   "));
        childWindow.SetFocus();
此代码的最后一行出现System.InvalidOperationException失败

在实验中,我尝试在childWindow上找到一个控件,并调用SetFocus。它确实正确地将焦点设置在了正确的控件上,但没有将MDI窗口置于前台


有什么想法吗?

在设定焦点之前,你试过“BringToFront”吗?我可以想象,顶级控件(mdi父控件)不允许关注子控件,或者在子控件(mdi子控件)不可见时无法关注子控件。

我找不到BringToFront。这是哪个类的成员?可以找到有关WPF BringToFront的更多信息:BringToFront是windows窗体本机方法(因此为“”),谢谢您的帮助,但很抱歉,在我们的情况下,这不起作用。我们需要使用UIAutomation与外部应用程序进行交互。