Cocoa CGWindowListCopyWindowInfo& AXUIElementSetAttributeValue

时间:2012-06-28 19:38:43

标签: macos cocoa

我正在使用以下代码来获取所有窗口:

CFArrayRef windows = CGWindowListCopyWindowInfo(kCGWindowListOptionOnScreenOnly | kCGWindowListExcludeDesktopElements, kCGNullWindowID);

这给了我一系列字典:Front most window using CGWindowListCopyWindowInfo

然后我检查他们的边界,看看鼠标是否在其中,我找到的第一个是我的鼠标结束的那个。

然后我希望能够移动它。我知道如何使用AXUIElementSetAttributeValue移动窗口,但是我需要一个AXUIElementRef,我无法弄清楚如何离开字典。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:3)

无法从窗口编号转到AXUIElementRef

你最接近的是找到窗口的所有者,然后通过辅助功能查询它的窗口并查找具有相同标题的窗口 - 但是一个应用程序可能有多个具有相同标题的窗口,所以你需要弄明白你在这种情况下会做些什么。

移动其他应用程序窗口的唯一方法是 AppleScript 辅助功能。使用辅助功能 AppleScript 更可靠(许多(如果不是大多数)应用程序具有不完整和/或不稳定的脚本支持)。您可以从提供窗口编号的同一窗口字典中获取进程ID和窗口标题,但这是您可以获得的具体内容。使用AppleScript,您只能在其应用程序的窗口列表中使用窗口索引,并希望列表在计算索引和尝试使用它之间的瞬间不会改变顺序。