gpt4 book ai didi

swift - 如何在 Swift 中从 CFTypeRef 转换为 AXUIElement

转载 作者:搜寻专家 更新时间:2023-10-30 22:13:14 25 4
gpt4 key购买 nike

这段代码产生了预期的调试输出 type = AXUIElement,但转储堆栈并表示动态转换在实际转换点失败:

func mainWindow() {
var ptr: Unmanaged<AnyObject>?
let kAXMainWindow: CFString! = "AXMainWindow" as NSString
let appRef: AXUIElement! = AXUIElementCreateApplication(self.pid()).takeRetainedValue()

let err = AXUIElementCopyAttributeValue(appRef, kAXMainWindow, &ptr)
if err == AXError(kAXErrorSuccess) {
let val: AnyObject? = ptr?.takeRetainedValue()
if val != nil {
let value: AnyObject = val!
let description = CFCopyTypeIDDescription(CFGetTypeID(value))
println("type = \(description)")
let element = value as AXUIElement
}
else {
println("got nil result")
}
}
}

完成这项工作的正确方法是什么?

最佳答案

此代码适用于 XCode 6.1 和 Swift 1.1。

然而,3 年过去了,Swift 已经变得更好了。尽管如此,当您搜索如何使用 Swift 的辅助功能 API 时,这仍然是最重要的结果。所以我回来用我知道的当前最简单的方式更新:

func AXUIWindowArray(processIdentifier pid:pid_t) -> [AXUIElement] {
var result = [AXUIElement]()
var windowList: AnyObject? = nil // [AXUIElement]

let appRef = AXUIElementCreateApplication(pid)
if AXUIElementCopyAttributeValue(appRef, "AXWindows" as CFString, &windowList) == .success {
result = windowList as! [AXUIElement]
}
return result
}

关于swift - 如何在 Swift 中从 CFTypeRef 转换为 AXUIElement,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25579449/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com