我正在使用内置的Java机器人类创建自动化的typer。我也是在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
我的问题:为什么在Mac上无法识别shift键?
答案 0 :(得分:1)
你必须要考虑如何应用击键,记住,你是“模拟”一个物理用户。
这意味着,为了能够输入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);
}
}
,您需要按 SHIFT A 然后释放 A < kbd> SHIFT (或者至少在你完成时释放 SHIFT )
以下是一个真正基本的测试,展示了整体概念。打开文本编辑器,运行程序,你将有5秒钟让编辑器进入键盘焦点
if read -p "Enter IP1" IP1; then
sed -i~ -e "s/myip1/${IP1}/g" test.txt
else
echo Error
fi
答案 1 :(得分:0)
在开关盒末端或相应的“中断”
之前释放换档键和按下的字符