Windows UIAutomation creating PropertyCondition

本文关键字:PropertyCondition creating UIAutomation Windows | 更新日期: 2023-09-27 18:09:57

我正在将一些UI自动化从System.Windows.Automation API移植到本地的UIAutomationClient API,并且遇到了感觉像一个简单的问题,但无法找到解决方案。

我需要找到UI元素使用代码沿着这些行:

IUIAutomationElement namedElement = currentWindow.FindFirst(UIAutomationClient.TreeScope.TreeScope_Descendants, nameCondition);

这里,nameconcondition对象应该是IUIAutomationCondition,用来比较元素的名称和字符串。

如果使用旧的System.Windows.Automation,我会这样写:

PropertyCondition nameCondition = new PropertyCondition(AutomationElement.NameProperty, "name");

然而,我不知道如何使用UIAutomation API来创建PropertyCondition。我所看到的唯一的例子似乎都是这样的:

IUIAutomationCondition nameCondition = cuiAutomation.CreatePropertyCondition(propertyIdName, "name");   

这里,propertyIdName应该是一个表示NameProperty的int。然而,我不知道如何在这里得到正确的int。我认为它必须在某个地方在UIAutomation API作为一个常量,但找不到它。

Windows UIAutomation creating PropertyCondition

我发现了以下有用的页面,其中列出了这些属性id的值:http://msdn.microsoft.com/en-us/library/windows/desktop/ee684017(v=vs.85).aspx

示例:UIA_AutomationIdPropertyId = 30011

使用此页,我在代码中为需要使用的属性id定义了int常量。我不认为这是正确的答案,但至少它能使我取得进步。

不是一个完整的答案,但我在UIAutomationClient.UIA_PropertyIds中找到了值。不幸的是,试图从代码中直接访问它们仍然会导致错误,但是您可以轻松地在它们上"Go to Definition"获取id值。

我已经使用IUIAutomation包装器作为我的。net核心项目的nuget包工作了相当长的一段时间。有一些类存放这些信息,比如propertyid或controltypeid。所讨论的nuget是Interop.UIAutomationClient。就我个人而言,我不会尝试记下实际的ID,而是尝试在代码中使用它的引用。一个例子可以是这样的:

IUIAutomationCondition cond1 = CurrentWindow.CreatePropertyCondition(UIA_PropertyIds.UIA_ControlTypePropertyId, UIA_ControlTypeIds.UIA_EditControlTypeId);
IUIAutomationCondition cond2 = CurrentWindow.CreatePropertyCondition(UIA_PropertyIds.UIA_NamePropertyId, "File name:");

UIA_ControlTypeIds和UIA_PropertyIds将是引用不同Controltypes和Properties的id的类。我确信nuget中有更多可用的类,但我个人认为没有必要立即深入研究。

相关文章:
  • 没有找到相关文章