java-如何确定字符是否需要按下Shift键才能输入?

我正在编写一些代码以使用Robot类键入字符串.一切基本都很好(嗯,我必须使用一个大的switch语句来获取字符键码),除了一些键没有键码,因为它们实际上是Shift键和其他键的组合.对于大写字母,使用Character.isUpperCase(c)易于检查,但是对于所有符号,例如!@#$%^& *()_和各种标点符号,尽管它们将被视为“大写”确实需要按下shift键才能产生击键.我尝试使用Google搜索,但是发现论坛帖子没有令人满意的答案.是否有任何方法可以确定某个字符是否需要按下才能移动,如果需要,那么“未移动”版本是哪个字符?

编辑:这是我到目前为止的代码.

public void GenerateKeyTyped(char c) {
    if (Character.isUpperCase(c)) {
        r.keyPress(KeyEvent.VK_SHIFT);
    }
    r.keyPress(GetKeyCode(c));
    r.keyRelease(GetKeyCode(c));
    if (Character.isUpperCase(c)) {
        r.keyRelease(KeyEvent.VK_SHIFT);
    }
}

解决方法:

我不知道直接解决您的问题的方法(我最终为那些字符使用了Map),但是它可能会给您一些想法:

import java.io.*;
import java.util.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Main3 {

    public static void main(String[] args) {
        try {
            Robot robot = new Robot();

            HashMap<String, String> map = new HashMap<String, String>();
            map.put("!", "1");
            map.put("@", "2");
            map.put("#", "3");

            char[] charz = "abcdefgABCDEFG123!#".toCharArray();

            for(int i = 0; i < charz.length; i++)
            {
                System.out.print(charz[i] + " : ");
                boolean shiftRequired = false;
                String key = String.valueOf(charz[i]);
                String value = map.get(key);

                if (value != null)
                {
                    shiftRequired = true;
                    key = value;
                }
                else if (Character.isUpperCase(key.charAt(0)))
                {
                    shiftRequired = true;
                }
                else
                {
                    key = key.toUpperCase();
                }

                KeyStroke ks = KeyStroke.getKeyStroke("pressed " + key.toUpperCase());

                int keyCode = ks.getKeyCode();
                System.out.println(keyCode);

                if (shiftRequired)
                    robot.keyPress(java.awt.event.KeyEvent.VK_SHIFT);

                robot.keyPress( keyCode );
                robot.keyRelease( keyCode );

                if (shiftRequired)
                    robot.keyRelease(java.awt.event.KeyEvent.VK_SHIFT);
            }


        } catch(Exception e) {
            e.printStackTrace();
        }
    }
}
上一篇:C键盘键码和JAVA KeyEvent键码之间的区别


下一篇:adb命令模拟按键事件KeyCode