尝试查找焦点元素的IUIAutomation位于Microsoft Outlook功能区上

时间:2018-04-03 00:21:34

标签: c#

使用自动化我使用下面的代码成功找到了焦点元素,但我试图确定焦点元素是否在Microsoft Outlook功能区上。我正在尝试下面的代码作为一个例子,但收效甚微

if (process.Equals ("Microsoft Outlook"))
{
    lowerRibbonMenuCondition = _automation.CreatePropertyCondition
        (UIA_PropertyIds.UIA_NamePropertyId, "Lower Ribbon");
    //this line works fine    
    IUIAutomationElement element = _automation.GetFocusedElementBuildCache(cacheRequest);
    //this line doesn't
    IUIAutomationElement lowerRibbonElement = element.FindAll(TreeScope.TreeScope_Ancestors, 
        lowerRibbonCondition);
    if (elementArray.Length > 0)
      MessageBox.Show("focused element is on the ribbon", "Testing");
}

1 个答案:

答案 0 :(得分:0)

来自FindAll的MSDN文档:

  

块引用

此功能无法在Microsoft UI Automation树中搜索祖先元素;也就是说,TreeScope_Ancestors不是scope参数的有效值。

  

块引用

所以显然这不能在这里使用。另外,在创建一个名为lowerRibbonMenuCondition的条件时,在对element.FindAll的调用中使用lowerRibbonCondition,尽管这可能是一个错字。您可以使用MSDN中的以下示例向上遍历自动化树并修改它以检查每个父元素的名称,找到功能区栏或到达根目录:https://msdn.microsoft.com/en-us/library/windows/desktop/ff625922(v=vs.85).aspx#WalkAncestors您应该首先使用Microsoft SDK的Inspect工具查看Outlook功能区的名称属性实际上是“Lower Ribbon”。