如何在 Swift 中使用 AXObserverAddNotification?

2024-06-24

如何在 Swift 中使用 AXObserverAddNotification 来检测 UI 更改?

Obj C 中有一个很好的答案。

我的应用程序如何检测另一个应用程序窗口的更改? https://stackoverflow.com/questions/853833/how-can-my-app-detect-a-change-to-another-apps-window

如何将答案翻译成 Swift?

下面的测试代码编译并运行没有错误,但是当我更改主窗口时,callBack 似乎没有被执行。

    func observe(app:pid_t, element:AXUIElement) {
        var observer: AXObserver? = nil
        func callBack(observer: AXObserver?, element: AXUIElement?, notification: CFString, refcon: UnsafeMutableRawPointer?) {
            print("Fired! \(notification)")
        }
        if AXObserverCreate(app, callBack, &observer) == .success {
            print("AXObserverCreate success!")
            if AXObserverAddNotification(observer!, element, kAXMainWindowChangedNotification as CFString, UnsafeMutableRawPointer(Unmanaged.passRetained(self).toOpaque())) == .success {
                print("AXObserverAddNotification success!")
                CFRunLoopAddSource(CFRunLoopGetCurrent(), AXObserverGetRunLoopSource(observer!), .defaultMode)
                print("Watching \(element.value(of:"AXTitle"))")
            }
        }
    }

@kyo-ago https://stackoverflow.com/users/9762269/kyo-ago在将那些类似 C 的 swift API 封装在他的代码中方面做得非常出色project https://github.com/kyo-ago/Automatically-Move-Mouse-Pointer-To-Default-Button-in-a-dialog-box-for-mac/blob/master/Automatically%20Move%20Mouse%20Pointer%20To%20Default%20Button%20in%20a%20dialog%20box%20for%20mac/Applications/Application.swift.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Swift 中使用 AXObserverAddNotification? 的相关文章

随机推荐

  • 运动结构,根据 2D 图像点对应关系重建 3D 点云

    Use case 物体绕其中心以不同的速度旋转 固定摄像机正在观察物体 给定 2D 图像点对应关系重建 3D 点云 当物体旋转时 相机可以看到它的不同部分 从而检测到不同的点和对应关系 Scene A N 张图片b N 1 图像对C N 1
  • 从图形创建图像

    在 VB NET 中 我需要创建一个Image基于一个Graphics我有对象 但是 没有诸如此类的方法Image fromGraphics 等等 那我该怎么办 尝试这样的事情MSDN 文章 http msdn microsoft com
  • Web 服务器何时清除 PHP 会话标识符?

    背景 我正在尝试编写一个脚本 定期连接到网络服务器并检查特定页面上的某些信息是否已更改 我已经使用 bash 用于脚本 curl 用于实际连接 和 crontab 用于调度 的组合来完成这项工作 由于服务器需要身份验证 我首先使用curl
  • Rails Heroku 服务器回形针 Amazon S3 - AWS::S3::Errors::RequestTimeout

    当我使用附加图像保存 konkurrencer 模型时 我在 Heroku 上收到错误 但在本地服务器上却没有 我的 Heroku 日志 36m2012 04 01T17 45 37 00 00 app web 1 0m Started P
  • 更改将 HTML 标签名称扩展为元素的键

    我最近开始使用 PyCharm 编辑 HTML 文件 作为一个更大的 Python 项目的一部分 因此 我可能缺乏必要的经验来了解此功能所适应的更大前景 PyCharm 的 HTML 模式有一个很酷的功能 它将 CSS 选择器扩展为一个完整
  • 制作 pacman 时遇到一些问题?

    编辑 完全忘记提及我正在用 Java 编码 我真的很难制作某种检测系统或某种方法来使我的吃豆人精灵 角色在游戏中的棋盘上顺利移动 我没有把黑板做成图像 我首先尝试过颜色检测 效果最好 但一点也不平滑 而且相当不稳定 然后我尝试手动输入不允许
  • 如何始终在 ActionBar 上显示 Android 设置按钮?

    如何始终在 ActionBar 上显示 Android 设置按钮 4 0 即使设备有用于设置的硬件按钮 我也想显示它 因此带有和不带有硬件按钮的设备都是相同的 这就是我要说的 http oi48 tinypic com 2j104l0 jp
  • WPF 位图到图像的转换仅显示黑色图像

    我确实在以 wpf Image 形式显示图像 uEye Cam 时遇到一些问题 显示的 图像全黑 下面是我使用的代码 Get Cam Bitmap Image var cam new uEye Camera cam Init cam Mem
  • Netlify NodeJS 函数始终返回“对预检请求的响应未通过”

    我正在尝试使用创建一个 API 端点Netlify Lambda 函数 该代码在我的本地运行完美 但总是返回Access to XMLHttpRequest at https
  • ViewPager2 具有不同的项目高度和 WRAP_CONTENT

    有一些关于让 ViewPager 处理以扩展为中心的不同高度项目的帖子ViewPager自己修改它的onMeasure支持这一点 然而 鉴于ViewPager2被标记为最终类 扩展它不是我们可以做的事情 有谁知道是否有办法解决这个问题 例如
  • 如何在WCF请求和响应的soap标头中添加MessageID?

    企业移动设备管理协议在HTTP POST 请求中显示以下soap xml 如何将我的 Web 服务定义为要包含的肥皂头Action MessageID ReplyTo 和 To在请求和响应中 我尝试在 MessageCOntract 中定义
  • CSS 边框干扰绝对定位

    编辑 澄清 box sizing border box 似乎不适用 因为我使用的是绝对定位 下面的代码说明了我的问题 我使用绝对定位 因为我发现这对于基于流的布局来说更加棘手 但我愿意接受建议 我想要的是任意元素的边界 without影响节
  • platform.linux_distribution() 已弃用 - 有哪些替代方案?

    从 Python 3 5 开始platform linux distribution https docs python org 3 5 library platform html platform linux distribution已弃
  • 使用tensorflow和keras的不同训练结果

    Intro 我随机创建训练数据X形状为 1000 10 对于标签Y 它总是等于第一个元素X特征 例如 认为x1 0 1 0 2 0 3 0 9 theny 0 1 使用以下代码创建的数据集 from numpy random import
  • 是我的问题还是 Rails 和 Django 在 Windows 上安装困难?

    我尝试让这些框架在 Windows Vista 上运行几天 但没有成功 每次我认为我让它们工作时 我都会遇到一些涉及 PostgreSQL 或 MySQL 设置的随机错误 或者路径被搞砸了 或者一些其他命令行错误 未识别为内部或外部命令 或
  • 在 Java 中将希腊语转换为大写

    我想做的事情相当简单 String example Mary Had A Little Lamb String upper example toUpperCase 在希腊语中 只有大写单词的第一个字母才应包含重音字符 upper conta
  • 为什么 tkinter 输入验证需要调用 register() ?

    def check the input only allows digits only inp A function for validating the input the purpose of this is to let the us
  • 如何将产品添加到现有且已付款的 Woocommerce 订单中?

    我有一个 WooCommerce 网站 我的一位客户在该网站上购买了产品和电缆 该客户购买了一根与其他产品不兼容的电缆 并询问我们是否可以向他运送价格相同的兼容电缆 也许这是一个愚蠢的问题 但我如何编辑已付款的订单 删除不兼容的电缆并添加正
  • 将 NSDate 转换为 NSString

    我如何转换 NSDate to NSString所以只有这一年 yyyy 格式是输出到字符串吗 怎么样 NSDateFormatter formatter NSDateFormatter alloc init formatter setDa
  • 如何在 Swift 中使用 AXObserverAddNotification?

    如何在 Swift 中使用 AXObserverAddNotification 来检测 UI 更改 Obj C 中有一个很好的答案 我的应用程序如何检测另一个应用程序窗口的更改 https stackoverflow com questio