Windows UIAutomation创建PropertyCondition

时间:2014-06-21 17:58:46

标签: c# user-interface automation

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

我需要使用以下代码中的代码来查找UI元素:

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

这里,nameCondition对象应该是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中作为常量,但无法找到它。

2 个答案:

答案 0 :(得分:1)

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

例如:UIA_AutomationIdPropertyId = 30011

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

答案 1 :(得分:0)

不是一个完整的答案,但我在UIAutomationClient.UIA_PropertyIds中找到了值。不幸的是,尝试直接从您的代码访问它们仍然会导致错误,但您可以轻松地“转到定义”来获取ID值。