【问题标题】:Cocoa CGWindowListCopyWindowInfo & AXUIElementSetAttributeValue可可 CGWindowListCopyWindowInfo & AXUIElementSetAttributeValue
【发布时间】:2012-06-28 19:38:42
【问题描述】:

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

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

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

然后我检查它们的边界,看看鼠标是否在其中,我发现的第一个是我的鼠标在上面的那个。

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

我该如何解决这个问题?

【问题讨论】:

    标签: macos cocoa


    【解决方案1】:

    没有办法从窗口号转到AXUIElementRef

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

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

    【讨论】:

    • 这里是诅咒词,太糟糕了。我想我得另寻他法了。有没有办法从一个窗口号到其他我可以用来移动那个窗口的东西?
    • @TheOddler:不。移动另一个应用程序窗口的唯一方法是通过 AppleScript 和 Accessibility,而 Accessibility 比 AppleScript 更可靠(如果不是大多数,许多应用程序的脚本支持不完整和/或不稳定)。您可以从提供窗口编号的同一个窗口字典中获取进程 ID 和窗口标题,但这与您所能获得的一样具体。 (使用 AppleScript,您可以在其应用程序的窗口列表中使用窗口的索引,并希望列表在您计算索引和尝试使用它之间的瞬间没有改变顺序。)
    • 好的,谢谢,那我得试试别的了。非常感谢!
    猜你喜欢
    • 2015-10-31
    • 1970-01-01
    • 2011-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多