C# LegacyIAccessible in Windows.Automation

C# LegacyIAccessible in Windows.Automation,c#,winapi,automation,C#,Winapi,Automation,如何使用C#获得AutomationElement的LegacyAccessible.State和其他LegacyAccessible? 就像tools中的Inspect.exe一样。LegacyIAccessible是新的,与.NET 4.0不同,它在.NET级别不可用。但是有一个新的实现,它增加了对这一点的支持 请注意,您必须从源代码处编译项目,最新的二进制版本太旧,无法包含此内容 您想做的是: if ((bool) child.GetCurrentPropertyValue(Automat

如何使用C#获得AutomationElement的LegacyAccessible.State和其他LegacyAccessible?
就像tools中的Inspect.exe一样。

LegacyIAccessible是新的,与.NET 4.0不同,它在.NET级别不可用。但是有一个新的实现,它增加了对这一点的支持

请注意,您必须从源代码处编译项目,最新的二进制版本太旧,无法包含此内容

您想做的是:

if ((bool) child.GetCurrentPropertyValue(AutomationElementIdentifiers.IsLegacyIAccessiblePatternAvailableProperty)) {
    var pattern = ((LegacyIAccessiblePattern) child.GetCurrentPattern(LegacyIAccessiblePattern.Pattern));
    var state = pattern.GetIAccessible().accState;

    // Do something with state...
}
源代码中的注释说这些是Windows7的新功能,但我让它在WindowsXPSP3上工作

希望这有帮助


/AZ

但不会与.net4冲突吗?它有自己的实现。我是C#的新手。我可以只使用该项目或中的LegacyIAccessiblePattern.cs吗?我尝试了uiautomationverify和pattern中的lib。GetIAccessible()返回null:(不,它与.NET 4不冲突-您可以用生成的程序集中的代码替换程序集。它具有相同的接口(或者实际上是超集)所以它应该工作得很好。@Anderszomarin:它工作得很好。现在我可以用它调用控件上的DoDefaultAction:)非常感谢。你救了我的命@黄明:太好了!很高兴能够帮助一些人!