Char到Hex参数

时间:2013-06-18 12:22:08

标签: java awtrobot

我正在尝试使机器人打字方法更简单。 KeyEvent中的大多数密钥代码都是十六进制代码。

安排:

  1. Stringchar[]
  2. for-each到char[]
  3. 找到(int)char
  4. 的十六进制值
  5. keyPress((int)char的十六进制值)
  6. keyRelease((int)char的十六进制值)
  7. 到目前为止我所拥有的:

    import java.awt.*;
    import java.awt.event.*;
    public class Driver
    {
        private static Robot r;
        public static void send(String phrase)
        {
            char[] chars = phrase.toCharArray();
            for (char letter:chars)
            {
                //int hex = hex value of (int)letter
                //r.keyPress(hex);
                //r.keyRelease(hex);
            }
        }
        public static void main(String[]args)
        {
            try
            {
                r = new Robot();
                r.delay(5000);
                send("Hello World");
            }
            catch(AWTException e)
            {
                //Nothing
            }
        }
    }
    

2 个答案:

答案 0 :(得分:1)

ASCII字母的密钥代码等于它们的大写字符值。 所以你可以做到以下几点:

char[] chars = phrase.toUpperCase().toCharArray();
for (char letter:chars)
{
    int keyCode = (int)letter;
    r.keyPress(keyCode);
    r.keyRelease(keyCode);
}

通过这个循环,字符串“Hello World”将给出“hello world”。 它不适用于感叹号之类的东西。

此外,如果您不想让机器人发送大写字母,您必须模拟按住Shift键或大写锁定键的按键。

不确定此方法是否可靠。你也可以做很多if / else(或switch)从java.awt.event.KeyEvent返回正确的密钥代码常量。

答案 1 :(得分:1)

这项工作,但是对于像“HelloWorldéç”这样的特殊字符会有问题,请参阅输出 最好使用\ unnnn UniCode范例。

        final char[] chars = phrase.toCharArray();
        for (final char c : chars) {
            try {
                final byte[] tabB = (c + "").getBytes("UTF-8");
// You can replace "UTF-8" by : System.getProperty("sun.jnu.encoding"), 
                for (final byte element : tabB) {
                    System.out.format("%s\t0x%s\n", element,
                            Integer.toHexString(element));
                }
            } catch (final UnsupportedEncodingException e) {
                // TODO Auto-generated catch block
            }
        }

输出:

72  0x48
101 0x65
108 0x6c
108 0x6c
111 0x6f
32  0x20
87  0x57
111 0x6f
114 0x72
108 0x6c
100 0x64
32  0x20
-61 0xffffffc3
-87 0xffffffa9
32  0x20
-61 0xffffffc3
-89 0xffffffa7

使用System.getProperty(“sun.jnu.encoding”) - >我的电脑上的ISO-8859-15

72  0x48
101 0x65
108 0x6c
108 0x6c
111 0x6f
32  0x20
87  0x57
111 0x6f
114 0x72
108 0x6c
100 0x64
32  0x20
-23 0xffffffe9
32  0x20
-25 0xffffffe7