我写一些代码键入使用机器人类字符串。一切都很好大多(好吧,我必须用一个大的switch语句获取字符键码),除了一些键没有键码,因为他们实际上是<大骨节病>移 +其他一些重要的组合。对于大写字母,这很容易检查,使用Character.isUpperCase(c),但对所有的符号,如!@#$%^&*()_+和各种标点符号不被认为是“大写”虽然他们确实需要转变,以产生thier按键被按下。我试着用搜索引擎的它,但只是发现了一个论坛的帖子,没有令人满意的答案。有没有什么办法,以确定是否被按下的字符需要转移,如果是这样,什么字符是“未移位”的版本?

编辑:下面是代码我到目前为止

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);
    }
}
有帮助吗?

解决方案

我不知道的方式来直接解决您的问题(我刚刚结束了使用这些字符的地图),但它可能给你一些建议:

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();
        }
    }
}

其他提示

我不知道,如果你正在寻找什么是可能的。你可以创建自己的表,但请记住,它会那么只有一个键盘布局工作(许多语言都有自己的键盘布局更适合其特定的字符集,此外,还有,可能有它的Dvorak布局自己的移动VS不移位键),除非你考虑到所有的键盘布局,要支持,并为那些创建自定义表。

你能使用AWT类?这样的事情可能工作:

AWTKeyStroke ks = AWTKeyStroke.getAWTKeyStroke('!');
int modifers = ks.getModifiers();

if ((modifiers & KeyEvent.VK_SHIFT) == KeyEvent.VK_SHIFT) {
    // Shift pressed
}

如果你看看href="http://www.asciitable.com/" rel="nofollow noreferrer"> ASCII表这些符号键位于范围0x21 - 0x2B结果的

scroll top