3

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

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

这给了我一个字典数组,如下所示:Front most window using CGWindowListCopyWindowInfo

然后我检查他们的界限,看看鼠标是否在里面,我发现的第一个是我的鼠标在上面的那个。

然后我希望能够移动它。我知道如何使用AXUIElementSetAttributeValue来移动窗口,但我需要一个AXUIElementRef,但我不知道如何摆脱字典。

我该如何解决这个问题?

4

1 回答 1

3

没有办法从窗口编号转到AXUIElementRef.

最接近的方法是找到窗口的所有者,然后通过 Accessibility 询问它的窗口并寻找具有相同标题的窗口——但一个应用程序可能有多个具有相同标题的窗口,因此您需要弄清楚在这种情况下你会做什么。

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

于 2012-06-28T22:51:41.633 回答