Клавиша Java робота "сдвиг" на Mac? - PullRequest
0 голосов
/ 15 мая 2018

Я создаю автоматический типер, используя встроенный в Java класс роботов.Я также строю это на Mac, и я столкнулся с фундаментальным недостатком, который озадачивает меня.Не смотря ни на что,

клавиша «Shift» не регистрируется.

Я пробовал typerBot.keyPress(KeyEvent.VK_SHIFT); и несколько кодов клавиш, включая typerBot.keyPress(60);

Я просмотрел всю сеть и не могу ничего найти.

Вот небольшой пример программы, которая повторяет проблему, с которой я столкнулся на моей машине:

import java.awt.AWTException;
import java.awt.Robot;
import java.awt.event.KeyEvent;

public class RobotClass {

public static void main(String[] args) throws InterruptedException {

        try {   //Gives you 5 seconds to click into a suitable environment for the robot to type
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        String text = "AAAAAAAAAA";
        for(char c : text.toCharArray()) {
            RobotClass.typeChar(c);
            Thread.sleep(200);
        }

    }

    public static void typeChar(char c) {

        try {
            Robot typerBot = new Robot();
            switch(c) {
            case 'A':
                typerBot.keyPress(KeyEvent.VK_SHIFT);
                typerBot.keyPress(KeyEvent.VK_A);
                typerBot.keyRelease(KeyEvent.VK_A);
                typerBot.keyRelease(KeyEvent.VK_SHIFT);
                break;
            }
        } catch (AWTException e) {  e.printStackTrace();    }

    }

}

Ввод: AAAAAAAAAA

Вывод: aaaaaaaaaa

Мой вопрос: Почему клавиша Shift не распознается на Mac?

Ответы [ 2 ]

0 голосов
/ 15 мая 2018

Вы должны задуматься над тем, как применять нажатия клавиш, помните, что вы «симулируете» физического пользователя.

Это означает, что для того, чтобы набрать A, вам нужно нажать SHIFT A , затем отпустить A SHIFT (или, по крайней мере, отпустите SHIFT , когда вы закончите)

Ниже приведен действительно базовый тест, демонстрирующий общую концепцию. Откройте текстовый редактор, запустите программу, у вас будет 5 секунд, чтобы перевести редактор в фокус клавиатуры

Robot bot = new Robot();
bot.setAutoDelay(10);
Thread.sleep(5000);
Map<Character, Integer> mapStrokes = new HashMap<>();
mapStrokes.put('t', KeyEvent.VK_T);
mapStrokes.put('h', KeyEvent.VK_H);
mapStrokes.put('i', KeyEvent.VK_I);
mapStrokes.put('s', KeyEvent.VK_S);
mapStrokes.put(' ', KeyEvent.VK_SPACE);
mapStrokes.put('e', KeyEvent.VK_E);
mapStrokes.put('a', KeyEvent.VK_A);
String text = "This is A test";
for (char value : text.toCharArray()) {
    if (Character.isUpperCase(value)) {
        bot.keyPress(KeyEvent.VK_SHIFT);
    }
    int keyStroke = mapStrokes.get(Character.toLowerCase(value));
    System.out.println("Type " + value);
    bot.keyPress(keyStroke);
    bot.keyRelease(keyStroke);
    if (Character.isUpperCase(value)) {
        bot.keyRelease(KeyEvent.VK_SHIFT);
    }
}
0 голосов
/ 15 мая 2018

Отпустите клавишу Shift и нажатый символ в конце корпуса переключателя или перед соответствующим «разрывом»

...