Я искал решение очень похожей проблемы.
До сих пор я нашел одно - очень хрупкое! - решение.
Это работает для моего случая, потому что мой случай включает в себя запуск целых сеансов с использованием java.awt.Robot
без взаимодействия с пользователем, поэтому он может - или не может - работать для вашего случая.
Решение использует java.awt.Robot
для отправки нажатий клавиш, например Alt+Tab
, чтобы вывести желаемое окно на передний план.
Конечно, это хрупко по нескольким причинам:
- Робот не может знать, как часто нужно отправлять
Alt+Tab
, чтобы вывести желаемое окно вперед. Окно одно во многих. Это решение работает, только если уже известно, какое окно с точки зрения Alt-Tab
-count это.
- В зависимости от операционной системы требуемое нажатие клавиши может быть чем-то другим.
Если ОС и последовательность окон известны, то есть программа может заранее знать, сколько потребуется Alt-Tab
нажатий клавиш, иногда это может быть решением.
Следующая Java-программа демонстрирует, как это сделать. Если вызывается без аргументов, он генерирует ровно одно Alt+Tab
нажатие клавиши. Если вызывается с аргументами, программа предполагает, что первый аргумент является числом, и генерирует столько Alt+Tab
нажатий клавиш, сколько указано этим числом.
Возможно, вы захотите немного поиграть со значениями синхронизации, указанными в robot.delay()
и robot.setAutoDelay()
, чтобы обеспечить наилучшие впечатления на вашей машине. Подсказка: по крайней мере в Linux robot.setAutoDelay()
, безусловно, должно быть меньше, чем задержка повторения клавиатуры, в противном случае ОС генерирует множественные нажатия клавиш Alt-Tab
в очереди событий системы из-за повторения клавиш.
import java.awt.AWTException;
import java.awt.Robot;
import static java.awt.event.KeyEvent.VK_ALT;
import static java.awt.event.KeyEvent.VK_TAB;
import static java.lang.Integer.parseInt;
public class WindowSwitcher {
public static void main(final String... args) throws AWTException {
final int repeat = args.length != 0 ? parseInt(args[0]) : 1;
final Robot robot = createRobot();
robot.keyPress(VK_ALT);
for (int i = 0; i < repeat; i++) {
robot.keyPress(VK_TAB);
robot.keyRelease(VK_TAB);
robot.delay(500);
}
robot.keyRelease(VK_ALT);
}
public static Robot createRobot() throws AWTException {
final Robot robot = new Robot();
robot.setAutoWaitForIdle(true);
robot.setAutoDelay(10);
return robot;
}
}