2

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

我们正在使用UIAutomation,我可以成功地为每个 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 窗口带到前台。

有任何想法吗?

4

1 回答 1

1

在设置焦点之前,您是否尝试过“BringToFront”?我可以想象顶级控件(mdi-parent)不允许关注孩子,或者当孩子(mdi-child)不可见时无法这样做。

于 2010-04-26T06:22:02.527 回答