Java Mac 上的机器人按键 "shift"?
Java robot keypress "shift" on Mac?
我正在使用内置 Java 机器人 class 创建一个自动打字机。我也在 Mac 上构建它,但我遇到了一个困扰我的基本缺陷。不管怎样,
the "shift" key does not register.
我试过 typerBot.keyPress(KeyEvent.VK_SHIFT);
和一些关键代码,包括 typerBot.keyPress(60);
我在网上找遍了,但找不到任何东西。
这是一个小示例程序,它复制了我在 machine 上遇到的问题:
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
我的问题: 为什么在 mac 上无法识别 shift 键?
在 switch case 的末尾或相应的 "break"
之前释放您的 shift 键和按下的字符
您必须考虑如何应用击键,请记住,您是 "simulating" 物理用户。
这意味着,为了能够键入 A
,您需要按下 SHIFTA 然后松开 ASHIFT(或至少在完成后释放 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);
}
}
我正在使用内置 Java 机器人 class 创建一个自动打字机。我也在 Mac 上构建它,但我遇到了一个困扰我的基本缺陷。不管怎样,
the "shift" key does not register.
我试过 typerBot.keyPress(KeyEvent.VK_SHIFT);
和一些关键代码,包括 typerBot.keyPress(60);
我在网上找遍了,但找不到任何东西。
这是一个小示例程序,它复制了我在 machine 上遇到的问题:
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
我的问题: 为什么在 mac 上无法识别 shift 键?
在 switch case 的末尾或相应的 "break"
之前释放您的 shift 键和按下的字符您必须考虑如何应用击键,请记住,您是 "simulating" 物理用户。
这意味着,为了能够键入 A
,您需要按下 SHIFTA 然后松开 ASHIFT(或至少在完成后释放 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);
}
}