我正在使用以下代码来获取所有窗口:
CFArrayRef windows = CGWindowListCopyWindowInfo(kCGWindowListOptionOnScreenOnly | kCGWindowListExcludeDesktopElements, kCGNullWindowID);
这给了我一系列字典:Front most window using CGWindowListCopyWindowInfo
然后我检查他们的边界,看看鼠标是否在其中,我找到的第一个是我的鼠标结束的那个。
然后我希望能够移动它。我知道如何使用AXUIElementSetAttributeValue
移动窗口,但是我需要一个AXUIElementRef
,我无法弄清楚如何离开字典。
我该如何解决这个问题?
答案 0 :(得分:3)
无法从窗口编号转到AXUIElementRef
。
你最接近的是找到窗口的所有者,然后通过辅助功能查询它的窗口并查找具有相同标题的窗口 - 但是一个应用程序可能有多个具有相同标题的窗口,所以你需要弄明白你在这种情况下会做些什么。
移动其他应用程序窗口的唯一方法是 AppleScript 或辅助功能。使用辅助功能比 AppleScript 更可靠(许多(如果不是大多数)应用程序具有不完整和/或不稳定的脚本支持)。您可以从提供窗口编号的同一窗口字典中获取进程ID和窗口标题,但这是您可以获得的具体内容。使用AppleScript,您只能在其应用程序的窗口列表中使用窗口索引,并希望列表在计算索引和尝试使用它之间的瞬间不会改变顺序。