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

标签 objective-c swift

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

相关文章:

ios - 如何使 View 高度取决于 Swift 中的内容?

ios - 使用结构在 Swift 5 中使用 JSONDecoder 解析 JSON

ios - 从 NSMutableArray 创建一个 NSMUtableDictionary

objective-c - 如何使用 NSLog 显示十六进制字节

swift - OS X cocoa swift : Setting up a ViewController programmatically (without Storyboard or nib files)

json - NSJSONSerialization - 无法在 Swift 上将数据转换为字符串

ios - 如何在 swift 上刷新所有 firebase 数据

ios - 将 NSDictionary 传递给函数以添加对象/键,但在 main() 中显示为空

iphone - 使用 NSString sizeWithFont :constrainedToSize:lineBreakMode: 调整大小时,表格单元格最后一行被截断

iphone - 在 iOS 中绘制 NSAttributedString?