在 MacOS 中,如何在任意屏幕位置获取最前面的窗口?

问题描述 投票:0回答:1

在 MacOS 中,我想制作一个脚本,将最前面的窗口(如果有)聚焦在任意屏幕坐标

(x, y)
,与该窗口所属的应用程序/进程无关。

这相当于在该位置上单击鼠标,但我只想激活/聚焦窗口,而不是触发任何鼠标单击事件(例如,目标窗口可能在我的这个位置有一个按钮)不想被点击)。因此,我有兴趣获取给定屏幕坐标处最前面窗口的句柄

(x, y)
,以便我可以通过编程方式将其聚焦。

有没有办法在 AppleScript、Swift 或 Python 中做到这一点?

swift macos applescript window-management
1个回答
0
投票
这在 Swift 和 Accessibility API 中是可能的。

首先,使用

创建一个系统范围的可访问性对象

AXUIElementCreateSystemWide()

然后,使用

查询您坐标处最前面的可访问性对象

AXUIElementCopyElementAtPosition(_:_:_:_:)

这是一个例子:

func elementAtPosition(x: Float, y: Float) throws -> AXUIElement? {
    let systemwide = AXUIElementCreateSystemWide()
    var element: AXUIElement?
    let error = AXUIElementCopyElementAtPosition(systemwide, x, y, &element)
    if error != .success {
        throw error
    }
    return element
}

请注意,您的应用程序需要辅助功能权限,因此无法沙箱。 查询权限是通过

AXIsProcessTrustedWithOptions(_:)

完成的
© www.soinside.com 2019 - 2024. All rights reserved.