2

如何在 OSX 上从 Java 程序设置任意应用程序(Java 或非 Java)的焦点(例如 cmd+tab)?

在寻找这个问题的答案时,我遇到了这个问题,但这对 OSX 并没有真正的帮助。

编辑:一种可能性似乎是使用Quicksilver之类的东西,并Robot使用修饰符向它发送按键。不过,我更喜欢更便携的东西,在编译后需要更少的设置来进行更改....

4

3 回答 3

3

您应该能够使用openOS X 附带的命令重新激活已经运行的应用程序:

Runtime.exec("open /path/to/Whichever.app");

(或该功能的一些等效重载。)如果尚未运行,这也会打开一个应用程序。

于 2013-02-13T18:29:21.713 回答
2

您可以使用 javax.script API 来运行 AppleScripts。因此,您可以按照“告诉应用程序“WhateverApp”激活”的方式编写一个脚本,为您的任意应用程序填写 WhateverApp,它应该执行您想要的操作。

于 2013-02-13T18:07:46.703 回答
2

Chuck 的回答提示我osascript,所以我决定直接从命令行试一试。设法让它与Runtime.exec()osascript和 AppleScript 一起工作。

Java 启动一个 AppleScript 并将应用程序名称传递给它,osascript从命令行使用,通过Runtime.exec()

try {
    List<String> shellCommandList = new ArrayList<String>();
    shellCommandList.add("osascript");
    shellCommandList.add("activateApplication.scpt");
    shellCommandList.add(appName);

    String[] shellCommand = (String[])shellCommandList.toArray(new String[0]);
    Process p = Runtime.getRuntime().exec(shellCommand);

    // if desired, pipe out the script's output
    BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream()));
    String cmdOutStr = "";
    while ((cmdOutStr = in.readLine()) != null) {
        System.out.println(cmdOutStr);
    }

    // if desired, check the script's exit value
    int exitValue = p.waitFor();
    if (exitValue != 0) {
        // TODO: error dialog
        System.err.println("Invalid application name: "+ appName);
    }
} catch (Exception e) {
    e.printStackTrace();
}

AppleScript 使用运行处理程序来捕获传入的参数:

on run (arguments)
    set appName to (item 1 of arguments)
    tell application appName to activate
    return 0
end run
于 2013-02-13T18:22:54.823 回答