如何在Cocoa应用程序中的特定应用程序中激活特定窗口(但不是所有窗口)?

时间:2014-09-21 09:10:06

标签: objective-c cocoa

我正在尝试创建一个管理Windows来切换它们的OS X应用程序。

但我找不到合适的解决方案来激活特定的窗口。

我找到了这种方式。


  • 使用AppleScript。
    • 按窗口标题或窗口编号指定窗口。
    • 但是,如果窗口具有与其他窗口相同的窗口标题,则激活无法正常工作。

-- For example, this script activate Google Chrome's second window
tell application "System Events"
    tell process "Google Chrome"
        set thewindow to window 2
        tell thewindow
            perform action "AXRaise"
        end tell
        set frontmost to true
    end tell
end tell

  • 使用NSApplicationActivateIgnoringOtherApps
    • 但是,这种方式无法指定窗口。

NSRunningApplication* app = [NSRunningApplication runningApplicationWithProcessIdentifier: PID];
[app activateWithOptions: NSApplicationActivateIgnoringOtherApps];

是否存在激活特定窗口的其他适当方式?

1 个答案:

答案 0 :(得分:0)

辅助功能正常。随着AXRaiseWindow& switchToApp你可以切换到任何窗口。

请注意:https://github.com/jsuder/WindowFairy/blob/master/WindowManager.m

(免责声明:不是我的代码,我不熟悉作者。只是使用谷歌)

注意:还有一个CGWindowList API可用于枚举Windows,但它已被弃用。 AX *保持不变