2

OSX で、Java プログラムから任意のアプリケーション (Java またはそれ以外) のフォーカス (例: cmd+tab) を設定するにはどうすればよいですか?

この質問への回答を探していると、この質問に出くわしましたが、OSX にはあまり役に立ちません。

編集: 1つの可能性は、 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 を使用して AppleScript を実行できます。したがって、「アプリケーション「WhateverApp」にアクティブ化するように指示する」という行に沿ってスクリプトを記述し、WhateverApp の任意のアプリケーションを入力すると、必要なことが実行されます。

于 2013-02-13T18:07:46.703 に答える
2

チャックの答えは私にヒント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 に答える