使用 System.WindowsAutomation 库时无法检索控件的模式
Cannot retrieve the pattern for a control when using the System.WindowsAutomation library
我正在尝试使用 System.Windows.Automation
自动化 WinForms 应用程序,我能够检索元素(选项卡项)
var tab = window.FindFirst(TreeScope.Children, new PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.Tab));
但无法获得 select 的模式 (SelectionItemPattern
)。这是模式列表及其对该元素的可用性(即 none):
Patterns for ControlType.TabItem:
Is DockPatternIdentifiers.Pattern available: no
Is ExpandCollapsePatternIdentifiers.Pattern available: no
Is GridItemPatternIdentifiers.Pattern available: no
Is GridPatternIdentifiers.Pattern available: no
Is InvokePatternIdentifiers.Pattern available: no
Is ItemContainerPatternIdentifiers.Pattern available: no
Is MultipleViewPatternIdentifiers.Pattern available: no
Is RangeValuePatternIdentifiers.Pattern available: no
Is ScrollItemPatternIdentifiers.Pattern available: no
Is ScrollPatternIdentifiers.Pattern available: no
Is SelectionItemPatternIdentifiers.Pattern available: no <------------
Is SelectionPatternIdentifiers.Pattern available: no
Is SynchronizedInputPatternIdentifiers.Pattern available: no
Is TableItemPatternIdentifiers.Pattern available: no
Is TablePatternIdentifiers.Pattern available: no
Is TextPatternIdentifiers.Pattern available: no
Is TogglePatternIdentifiers.Pattern available: no
Is TransformPatternIdentifiers.Pattern available: no
Is ValuePatternIdentifiers.Pattern available: no
Is VirtualizedItemPatternIdentifiers.Pattern available: no
Is WindowPatternIdentifiers.Pattern available: no
当我使用 inspect.exe
或 VisualUIAVerifyNative.exe
检查应用程序时,我可以看到该模式存在并且可用,来自 inspect.exe
:
的输出
IsAnnotationPatternAvailable: false
IsDragPatternAvailable: false
IsDockPatternAvailable: false
IsDropTargetPatternAvailable: false
IsExpandCollapsePatternAvailable: false
IsGridItemPatternAvailable: false
IsGridPatternAvailable: false
IsInvokePatternAvailable: false
IsItemContainerPatternAvailable: false
IsLegacyIAccessiblePatternAvailable: true
IsMultipleViewPatternAvailable: false
IsObjectModelPatternAvailable: false
IsRangeValuePatternAvailable: false
IsScrollItemPatternAvailable: false
IsScrollPatternAvailable: false
IsSelectionItemPatternAvailable: true <---------------------------------
IsSelectionPatternAvailable: false
IsSpreadsheetItemPatternAvailable: false
IsSpreadsheetPatternAvailable: false
IsStylesPatternAvailable: false
IsSynchronizedInputPatternAvailable: false
IsTableItemPatternAvailable: false
IsTablePatternAvailable: false
IsTextChildPatternAvailable: false
IsTextEditPatternAvailable: false
IsTextPatternAvailable: false
IsTextPattern2Available: false
IsTogglePatternAvailable: false
IsTransformPatternAvailable: false
IsTransform2PatternAvailable: false
IsValuePatternAvailable: false
IsVirtualizedItemPatternAvailable: false
IsWindowPatternAvailable: false
它适用于使用纯 WinForms 控件构建的小型应用程序。在这种情况下,该应用程序是使用 3rd 方组件构建的。我的结论是在这些控件中实现自动化的方式存在问题。
那么模式真的可用吗? inspect.exe
是否通过不同的 API 获得使用权?
我可以 运行 VisualUIAVerifyNative
中的可访问性测试(即 Pattern Tests
> Priority 3 Tests
> Select.1.4
测试)到 select 选项卡.或者我可以 select 通过在 属性 网格中执行命令 (Patterns
> SelectionItemPattern
> Select
).
看来我的 C# 代码中遗漏了一些重要的东西。
有人可以帮忙吗?谢谢!
我找到了解决方案 - 我现在引用 Interop.UIAutomationClient.dll
而不是引用 System.Windows.Automation.dll
。此 DLL 是 UIAutomationVerify 分发的一部分,或者可以使用 TlbImp.exe
(参见 How to build a interop dll from the UIAutomationClient.dll)生成。
我正在尝试使用 System.Windows.Automation
自动化 WinForms 应用程序,我能够检索元素(选项卡项)
var tab = window.FindFirst(TreeScope.Children, new PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.Tab));
但无法获得 select 的模式 (SelectionItemPattern
)。这是模式列表及其对该元素的可用性(即 none):
Patterns for ControlType.TabItem:
Is DockPatternIdentifiers.Pattern available: no
Is ExpandCollapsePatternIdentifiers.Pattern available: no
Is GridItemPatternIdentifiers.Pattern available: no
Is GridPatternIdentifiers.Pattern available: no
Is InvokePatternIdentifiers.Pattern available: no
Is ItemContainerPatternIdentifiers.Pattern available: no
Is MultipleViewPatternIdentifiers.Pattern available: no
Is RangeValuePatternIdentifiers.Pattern available: no
Is ScrollItemPatternIdentifiers.Pattern available: no
Is ScrollPatternIdentifiers.Pattern available: no
Is SelectionItemPatternIdentifiers.Pattern available: no <------------
Is SelectionPatternIdentifiers.Pattern available: no
Is SynchronizedInputPatternIdentifiers.Pattern available: no
Is TableItemPatternIdentifiers.Pattern available: no
Is TablePatternIdentifiers.Pattern available: no
Is TextPatternIdentifiers.Pattern available: no
Is TogglePatternIdentifiers.Pattern available: no
Is TransformPatternIdentifiers.Pattern available: no
Is ValuePatternIdentifiers.Pattern available: no
Is VirtualizedItemPatternIdentifiers.Pattern available: no
Is WindowPatternIdentifiers.Pattern available: no
当我使用 inspect.exe
或 VisualUIAVerifyNative.exe
检查应用程序时,我可以看到该模式存在并且可用,来自 inspect.exe
:
IsAnnotationPatternAvailable: false
IsDragPatternAvailable: false
IsDockPatternAvailable: false
IsDropTargetPatternAvailable: false
IsExpandCollapsePatternAvailable: false
IsGridItemPatternAvailable: false
IsGridPatternAvailable: false
IsInvokePatternAvailable: false
IsItemContainerPatternAvailable: false
IsLegacyIAccessiblePatternAvailable: true
IsMultipleViewPatternAvailable: false
IsObjectModelPatternAvailable: false
IsRangeValuePatternAvailable: false
IsScrollItemPatternAvailable: false
IsScrollPatternAvailable: false
IsSelectionItemPatternAvailable: true <---------------------------------
IsSelectionPatternAvailable: false
IsSpreadsheetItemPatternAvailable: false
IsSpreadsheetPatternAvailable: false
IsStylesPatternAvailable: false
IsSynchronizedInputPatternAvailable: false
IsTableItemPatternAvailable: false
IsTablePatternAvailable: false
IsTextChildPatternAvailable: false
IsTextEditPatternAvailable: false
IsTextPatternAvailable: false
IsTextPattern2Available: false
IsTogglePatternAvailable: false
IsTransformPatternAvailable: false
IsTransform2PatternAvailable: false
IsValuePatternAvailable: false
IsVirtualizedItemPatternAvailable: false
IsWindowPatternAvailable: false
它适用于使用纯 WinForms 控件构建的小型应用程序。在这种情况下,该应用程序是使用 3rd 方组件构建的。我的结论是在这些控件中实现自动化的方式存在问题。
那么模式真的可用吗? inspect.exe
是否通过不同的 API 获得使用权?
我可以 运行 VisualUIAVerifyNative
中的可访问性测试(即 Pattern Tests
> Priority 3 Tests
> Select.1.4
测试)到 select 选项卡.或者我可以 select 通过在 属性 网格中执行命令 (Patterns
> SelectionItemPattern
> Select
).
看来我的 C# 代码中遗漏了一些重要的东西。
有人可以帮忙吗?谢谢!
我找到了解决方案 - 我现在引用 Interop.UIAutomationClient.dll
而不是引用 System.Windows.Automation.dll
。此 DLL 是 UIAutomationVerify 分发的一部分,或者可以使用 TlbImp.exe
(参见 How to build a interop dll from the UIAutomationClient.dll)生成。