我正在尝试使用AXUIElement获取NSAccessibilityChildrenAttribute子级的数组,以便在应用程序中构建所有AXUIElement的树。

它在Mac本机应用程序上运行良好,但在Java应用程序(如NetBeans)上运行不正常。

当我在AXUIElement中得到一个AXUIElementCopyElementAtPosition (AXUIElementRef application, float x,float y, AXUIElementRef *element)时,可以回到根目录来检索所有的父母,但是我不能得到孩子。

还有其他途径可以访问儿童吗?

最佳答案

import Foundation
import AppKit
import ApplicationServices

let indd = NSWorkspace.shared.runningApplications.filter{$0.bundleIdentifier == "com.adobe.InDesign"}.first!
indd.activate(options: .activateIgnoringOtherApps)
let app = AXUIElementCreateApplication(indd.processIdentifier)
var attArray:CFArray?
AXUIElementCopyAttributeNames(app, &attArray)
print(attArray ?? "nil")
var childrenPtr:CFTypeRef?
AXUIElementCopyAttributeValue(app, kAXChildrenAttribute as CFString, &childrenPtr)
let children = childrenPtr as! CFArray
print(children)


CFArray包含父应用程序的子代。可以递归重复相同的原理。

上面的代码在Obj-C中看起来应该相似。我从工作区复制粘贴了此内容。

您问题的关键答案是

AXUIElementCopyAttributeValue(app, kAXChildrenAttribute as CFString, &childrenPtr)


由于在此模型中子级是父级的属性。

关于objective-c - 如何获得NSAccessibility child ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28452264/

10-10 09:18