Alt+Tab с использованием Java Robot

Я пытаюсь вызвать меню alt+tab с помощью робота Java. Когда я вызываю метод alt_tab(), я хочу вызвать меню alt+tab и оставить меню открытым. Я знаю, что этого можно добиться с помощью alt+ctrl+tab.

До сих пор я пробовал код ниже, а также просто alt+tab без клавиши управления. Я не уверен, почему он не вызывает меню. Все, что он делает, это эмулирует нажатие клавиши Alt.

public void alt_tab() {
    Robot robot = new Robot();
    robot.keyPress(KeyEvent.VK_ALT);
    robot.keyPress(KeyEvent.VK_CONTROL);
    robot.keyPress(KeyEvent.VK_TAB);
    robot.delay(100);
    robot.keyRelease(KeyEvent.VK_TAB);
    robot.keyRelease(KeyEvent.VK_CONTROL);
    robot.keyRelease(KeyEvent.VK_ALT);
}

Я использую Windows 8 Pro и JDK 7. Любая помощь приветствуется!


person Kahtaf Alam    schedule 27.01.2013    source источник
comment
Ваш код отлично работает для меня, используя Windows 7 и JDK 7.   -  person Hovercraft Full Of Eels    schedule 27.01.2013
comment
Тогда это похоже на Windows 8, так как с Windows 8 и JDK 7 у меня такая же проблема.   -  person Konrad Reiche    schedule 27.01.2013
comment
Что, если вы поместите некоторые задержки между нажатиями и отпусканиями других клавиш?   -  person Hovercraft Full Of Eels    schedule 27.01.2013
comment
Спасибо за ваши ответы. Я безуспешно пытался установить задержки между каждым нажатием клавиши и нажатием клавиши.   -  person Kahtaf Alam    schedule 27.01.2013
comment
1) Чтобы быстрее получить помощь, опубликуйте SSCCE. 2) Читайте теги, прежде чем вешать их на посты. Это не имеет ничего общего с роботом.   -  person Andrew Thompson    schedule 28.01.2013
comment
ALT+TAB отлично работал у меня с Windows 10 Creators Edition.   -  person André Willik Valenti    schedule 26.07.2017


Ответы (2)


Существует тема Центра разработки для Windows где обсуждается именно эта проблема. Видимо правила изменились в Windows 8.

Имитация ввода с клавиатуры, которая может инициировать ответы в командной консоли, не гарантируется, что она больше не будет работать, если только приложение не является вспомогательным технологическим приложением с привилегиями UiAccess.

«Приложение специальных возможностей может использовать SendInput для ввода нажатий клавиш, соответствующих сочетаниям клавиш запуска приложения, которые обрабатываются оболочкой. Не гарантируется, что эта функция будет работать для других типов приложений». — Функция отправки ввода (Windows)

Должны быть выполнены следующие требования:

  • быть подписанным
  • быть установлен под %ProgramFiles% или %SystemRoot%\system32
  • указать uiAccess='true' в манифесте
  • запустить под SYSTEM или под текущим пользователем, вошедшим в систему

Группы Google

person Konrad Reiche    schedule 27.01.2013
comment
Если это ограничение Windows 8, есть ли другой способ добиться этого с помощью Java? - person Kahtaf Alam; 27.01.2013
comment
@user2015783 user2015783 Я обновил свой пост, указав требования, которые должны быть выполнены для вашей программы. Это очень много требований. Я бы определенно сказал, что это не решаемо только с помощью Java. В частности, я не уверен, как реализовать требования манифеста и подписанного приложения. - person Konrad Reiche; 27.01.2013

Я смог найти обходной путь. Я выполнил инструкции на этом создать ярлык для меню ALT+TAB и использовать

Runtime.getRuntime().exec("cmd \c start " + <path\to\shortcut\>);

для запуска меню ALT+TAB без каких-либо специальных привилегий UIAccess. Спасибо всем за ответы.

person Kahtaf Alam    schedule 04.02.2013
comment
Вы также можете настроить горячую клавишу на ярлык, а затем нажать ее с помощью робота. - person André Willik Valenti; 09.07.2015