【发布时间】:2020-04-05 03:36:25
【问题描述】:
我想知道是否有办法以编程方式获取屏幕上所有窗口的列表,包括当前应用程序之外的窗口。
我将解释我想要实现的目标。我是最近开始使用 mac 的 linux 用户。我在linux上使用fluxbox桌面管理器。在窗口之间切换时,我可以修改fluxbox直接跳转到我想要的窗口,而不是重复按alt+tab循环到所需的窗口。因为fluxbox是开源的,所以我能够做到这一点,我修改了代码,设置了一个快捷方式来将焦点放在我选择的特定打开的窗口上。
我正在尝试在 mac 上实现相同的目标,我想知道这是否可能。我似乎可以访问我的应用程序拥有的窗口,但我无法访问其他应用程序拥有的窗口
我按照post 尝试了 Core Graphics 库
- 我首先使用
CGWindowListCopyWindowInfo来获取CGWindowId的列表 - 接下来我使用
[NSApp windowWithWindowNumber:windowId]获得NSWindow。但是我得到的NSWindow是nil,但我的应用程序拥有的窗口除外。
这是 mac 的设计方式,我们无法访问我们自己的应用程序之外的窗口吗?或者有没有办法解决这个问题?如果 Mac 旨在防止应用程序控制其他应用程序的窗口,我想知道 GUI 自动化工具如何在 Mac 上工作。
【问题讨论】:
-
您无法从其他进程的窗口获取
NSWindow句柄。NSApp指的是您自己的应用程序。从您链接的帖子中 - 我会遵循使用 Accessibility API 的建议。
标签: macos cocoa core-graphics