gpt4 book ai didi

objective-c - 如何使用 Swift 中的 AXUIElementCopyAttributeValue?

转载 作者:搜寻专家 更新时间:2023-11-01 05:43:05 30 4
gpt4 key购买 nike

我正在尝试使用 Swift 中的 AXUIElementCopyAttributeValue。目前我最好的刺是这样的:

private func mainWindow() -> Optional<AXUIElementRef> {
let appRef = AXUIElementCreateApplication(self.pid())
var ptr: Unmanaged<AXUIElementRef>? = nil
var frontWindow: AXUIElementRef? = nil
let err = AXUIElementCopyAttributeValue(appRef, kAXMainWindowAttribute, &ptr)
if err == AXError(kAXErrorSuccess) {
frontWindow = ptr!.takeRetainedValue()
}
return frontWindow
}

不幸的是,kAXMainWindowAttribute 不在范围内。这当然适用于 ObjC,但我无法弄清楚从 Swift 访问时值隐藏在哪里。这也不是我第一次遇到这个问题,尽管之前我已经能够偶然发现它。

此外,我很乐意在这里收到任何文体建议。我不相信我正在以最自然的方式为 Swift 做这件事。

最佳答案

这还不是答案,但也许可以帮助别人给我答案......我将代码更改为这样,以便取得进展:

func mainWindow() -> WBWindow? {
var result: WBWindow? = nil
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)")
}
else {
NSLog("got nil result")
}
// result = WBWindow(element: ptr?.takeRetainedValue() as? AXUIElement)
}
return result
}

现在可以构建了——耶!但是,在运行时,注释掉的行让我陷入困境:

0x1001b57ea:  leaq   0x3f1a1(%rip), %rax       ; "Swift dynamic cast failed"

我在上面添加了调试代码并产生了:

类型 = AXUIElement

太棒了。这是一个不会转换为一个的 AXUIElement 吗?显然我遗漏了一些明显的东西......

关于objective-c - 如何使用 Swift 中的 AXUIElementCopyAttributeValue?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25575195/

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