我正在尝试使用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/