如何在Swift中从CFTypeRef转换为AXUIElement

如何在Swift中从CFTypeRef转换为AXUIElement,第1张

概述此代码生成预期的调试输出类型= AXUIElement,但转储堆栈并表示动态转换在转换的实际点失败: func mainWindow() { var ptr: Unmanaged<AnyObject>? let kAXMainWindow: CFString! = "AXMainWindow" as NSString let appRef: AXUIElement! = A 此代码生成预期的调试输出类型= 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的Accessibility 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中从CFTypeRef转换为AXUIElement全部内容,希望文章能够帮你解决如何在Swift中从CFTypeRef转换为AXUIElement所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1003821.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存