Ful*_*Int 10 c# ui-automation winforms
我正在学习UI自动化,我发现我的"Inspect Object"克隆显示IsKeyboardFocusable即使是真的也总是假的,所有其他信息都是相同的(从图像中可以看出).有没有人知道为什么我在检索值时将此属性视为false?

在Inspect Object应用程序中,最新版本的Windows Automation COM API(3.0)用于显示所有这些属性.但默认的.NET UIAutomation实现不是基于Windows Automation API 3.0 COM接口(它基于此COM API的先前版本).因此,某些属性无法正常运行.例如,对于Skype的联系人列表,该AutomationElement.IsKeyboardFocusableProperty属性表示根本不支持获取此属性的值.您可以使用以下代码段进行检查:
object isKeyboardFocusable = listItem.GetCurrentPropertyValue(AutomationElement.IsKeyboardFocusableProperty, true);
if(isKeyboardFocusable == AutomationElement.NotSupported) {
// we will always goes here
}
Run Code Online (Sandbox Code Playgroud)
现在,我不知道如何使用当前的.Net UIAutomation实现来避免这种行为.
好消息是.NET中有替代的UI自动化实现,可以使用新的Windows Automation API 3.0 COM接口,提高可靠性和性能,同时仍然使用与之前相同的System.Windows.Automation类. UI自动化的版本.此实现作为CodePlex上的项目提供:UI Automation COM-to-.NET Adapter
因此,今天尝试了这种替代实现,并且通过这种替代实现,IsKeyboardFocusable属性返回与该Inspect Objects工具相同的结果!此外,现在可以使用Inspect Objects显示器的某些扩展属性(例如LegacyIAccessible成员).