如何在OSX上从Java程序设置任意应用程序(Java或非Java)的焦点(例如cmd + tab)?
在寻找这个问题的答案时,我遇到了this question,但它对OSX没有任何帮助。
编辑:一个可能性似乎是使用类似Quicksilver和Robot
的内容来发送带有修饰符的按键。不过,我更喜欢更便携的东西,它需要较少的设置才能在编译后进行更改....
答案 0 :(得分:3)
您应该能够使用OS X附带的open
命令重新激活已在运行的应用程序:
Runtime.exec("open /path/to/Whichever.app");
(或该功能的一些等效重载。)如果应用程序尚未运行,也会打开它。
答案 1 :(得分:2)
您可以使用javax.script API运行AppleScripts。所以你可以按照“告诉应用程序”WhateverApp“激活”的方式编写一个脚本,为WhateverApp填写你的任意应用程序,它应该做你想要的。
答案 2 :(得分: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