在 MacOS 中,我想制作一个脚本,将最前面的窗口(如果有)聚焦在任意屏幕坐标
(x, y)
,与该窗口所属的应用程序/进程无关。
这相当于在该位置上单击鼠标,但我只想激活/聚焦窗口,而不是触发任何鼠标单击事件(例如,目标窗口可能在我的这个位置有一个按钮)不想被点击)。因此,我有兴趣获取给定屏幕坐标处最前面窗口的句柄
(x, y)
,以便我可以通过编程方式将其聚焦。
有没有办法在 AppleScript、Swift 或 Python 中做到这一点?
首先,使用
创建一个系统范围的可访问性对象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(_:)
完成的