如何在 Swift 中从 CFTypeRef 转换为 AXUIElement

2023-12-28

此代码产生预期的调试输出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 开始运行。

然而,三年过去了,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
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Swift 中从 CFTypeRef 转换为 AXUIElement 的相关文章

随机推荐

  • 直接使用 ld 链接 C 程序失败,未定义对“__libc_csu_fini”的引用

    我正在尝试在Linux下编译C程序 然而 出于好奇 我尝试手动执行一些步骤 我使用 gcc 前端生成汇编代码 然后运行GNU汇编器来获取目标文件 然后将其与 C 运行时链接以获得可工作的可执行文件 现在我被链接部分困住了 该程序是一个非常基
  • 如何使用 python 获取文件的扩展 MacOS 属性?

    我有兴趣使用 python 从文件中获取更多信息 我知道使用 os stat 如下所示 会返回有关文件的信息 但我想从文件中获取其他属性 例如 来自哪里 os stat filename posix stat result st mode
  • 如何从 C 代码中获取单操作数 imul

    我必须用 C 语言编写什么才能让汇编器显示imul与一个操作数 例如 imul ebp 如果你想编写 C 代码以便编译器发出imul对于一个操作数 唯一的方法是使用扩大有符号乘法 即将操作数转换为有符号类型寄存器长度的两倍 因此 在 32
  • 单选按钮被选中的事件?

    是否有一些单选按钮被选择的事件 我知道我可以使用 单击 但我相信可以在某些浏览器中设置单选按钮的样式 这样单击单选按钮的外部区域可能不会选择该单选按钮 我应该使用什么事件 这取决于您想何时获知该事件 如果您想立即了解 请前往click IE
  • java中向上转换的内存分配

    考虑这些类 public class Animal public class Dog extends Animal public AnimalTest public static void main String args Dog d ne
  • 将 Stripe 与 Devise 结合使用以实现 Ruby on Rails 订阅

    我正在尝试将 Stripe 的定期支付系统与 Devise 集成 使用 Ryan 最近的 Railscast 作为指南 http railscasts com episodes 288 billing with stripe view as
  • Blend“WPF 项目不支持窗口”

    我对 Blend 报告 Windows Presentation Foundation WPF 项目不支持窗口 感到沮丧 由于无法构建的配置 但无法完全弄清楚如何摆脱它 我发现这可能是由于我尝试使用 x86 和 x64 配置的单一解决方案
  • 二进制可执行文件是可移植的

    编译 C 程序后 我可以获取二进制可执行文件 并在另一个没有加载 gcc 的系统 例如 Ubuntu 系统 上运行它吗 技术上 是的 但如果您需要最大的可移植性 请使用静态链接 严格来说你不需要gcc 但你可能需要各种库 默认情况下 语言处
  • CSS 将所选文本的一部分向右对齐[重复]

    这个问题在这里已经有答案了 这是我的 HTML 的样子
  • 如何使两个按钮并排且响应灵敏?

    我有一个小任务 在使用桌面时需要并排两个按钮 然后在移动设备上它们堆叠在一起但尺寸没有减小 我已经设法将它们堆叠在一起 但它们的大小不同 每当我定义按钮的 大小时 它们都会挤在一起 在设备视图中看起来很丑陋 button backgroun
  • 动画系统的神经网络大小

    我决定使用神经网络来为我拥有的动画引擎创建行为 神经网络为我身体的每个部位接收 3 个向量和 1 个欧拉角 第一个向量 3 是位置 第二个向量是速度 第三个向量是角速度 欧拉角是身体部位的旋转角度 我的身体有 7 个部位 这些数据类型中的每
  • SQL:仅比较日期与月份和年份列

    我有一张桌子MonthlyShipments看起来像 partnumber quantity month year part1 12 6 2011 part1 22 5 2011 part1 32 4 2011 part1 42 3 201
  • Linux fedora tc qdisc 出现“错误:未找到指定的 qdisc”。

    我正在尝试在 Linux fedora 上运行以下命令 sudo tc qdisc add dev enp2s0 handle 1 0 root netem delay 0 loss 1 我检查了接口 enp2s0 并且设置正常 但我收到以
  • 创建 Vec 时借用的值存在的时间不够长

    编者注 这个问题是在 Rust 1 0 之前提出的 从那时起 许多函数和类型都发生了变化 某些语言语义也发生了变化 问题中的代码不再有效 但答案中表达的想法可能有效 我正在尝试列出目录中的文件并将文件名复制到我自己的目录中Vec 我尝试了几
  • TThreadedQueue 不能支持多个消费者吗?

    尝试在单生产者多消费者方案中使用 TThreadedQueue Generics Collections 德尔福 XE 这个想法是将对象推入队列并让多个工作线程排空队列 但它并没有按预期工作 当两个或多个工作线程调用 PopItem 时 将
  • javascript / jquery 时间倒计时

    我想使用纯 Javascript 或受益于 jquery 来创建一个函数来倒计时结束时间 例如 consumes a javascript date object function countDown endtimme 它应该以 html
  • Octokit.net 创建新存储库

    我在使用 Octokit net 创建新存储库时遇到问题 这是我的代码 public async Task stvoriNovi FormCollection collection string name collection Get na
  • 查找数组中最长的单词/字符串

    我刚刚开始学习 JavaScript 我正在尝试编写一个 JavaScript 来查找并打印数组中最长的单词 我想出了下面的代码 var longWords Penelope Johny Aubumayang Czechoslovakia
  • Keras 可以像张量流数据集一样预取数据吗?

    在TensorFlow的Dataset API中 我们可以使用dataset prefetch buffer size xxx 在GPU处理当前批次的数据时预加载其他批次的数据 因此 我可以充分利用GPU 我将使用 Keras 想知道是否k
  • 如何在 Swift 中从 CFTypeRef 转换为 AXUIElement

    此代码产生预期的调试输出type AXUIElement 但转储堆栈并表示动态转换在实际转换点失败 func mainWindow var ptr Unmanaged