【问题标题】:Why aren't keystroke numbers working with lowercase alphabet?为什么击键数字不能与小写字母一起使用?
【发布时间】:2025-12-20 04:25:12
【问题描述】:

在击键方面我还是比较新的。当我将一个字符转换为整数然后尝试使用机器人按键它时,它不会打印出小写字母,而是将大写字母打印成小写字母。

我尝试通过将输入更改为全大写(使用 toUpperCase)来运行代码,这可行,但代码不会打印出大写字母。

import java.awt.Robot;
import java.util.Scanner;
import java.util.concurrent.TimeUnit;

public class typeWriter {
    public static void main(String[] args) throws InterruptedException {
        Scanner scan=new Scanner(System.in);
        try {
            String text6 = scan.nextLine();
            String text = text6.toUpperCase();
            char[] text1 = text.toCharArray();
            Robot robot = new Robot();
            int[] Charkey= new int[text1.length];
            TimeUnit.SECONDS.sleep(scan.nextInt());
            for(int i = 0; i<text1.length; i++) {
                Charkey[i]=(int) text1[i];
            }
            for(int y = 0; y<text1.length; y++) {
                robot.keyPress(Charkey[y]);
                robot.keyRelease(Charkey[y]);
            }
        } catch (AWTException e) {

        }

    }
}

当我输入“Hello”时,我希望它输入“Hello”,但它输入的是“h5/”(没有 toUpperCase 修饰符)。如果我将字符串更改为全大写,它会打印出正确的单词,但都是小写的。我该怎么办?

【问题讨论】:

  • 这与KeyStroke无关,该方法用于模拟在键盘上按下/释放并期望@987654321中定义的键码之一@(例如 KeyEvent_VK_H 用于 H 键)是否生成大写或小写取决于 CapsLock 状态或/和是否按下 Shift 键(例如 2 e = 101 = 0x65 = VK_NUMPAD5)。 VK_A-VK-Z,即 AZ 的键与 ASCII 'A'-'Z' 具有相同的代码,这几乎是巧合(不是真的)。
  • 你应该怎么做?取决于你想要做什么......也许使用输入字符的大写(因为这些映射到相应的键码)并在按下所需键之前和之后调用keyPress(KeyEvent.VK_SHIFT)keyRelease(KeyEvent.VK_SHIFT)以获得大写字母

标签: java keystroke


【解决方案1】:

我在某种程度上找到了答案。对于那些有同样问题的人来说,这可能不是最好的也不是最有效的方法,但我制作了一个由原始值组成的第二个数组,并在 for 循环中添加了一个 if 语句,说明原始值是否为这个特定索引中的值在 65 到 90 之间,它会刺激 shift 按键和实际按键。

【讨论】: