1

ロボットのタイピング方法をもっと簡単にしようとしています。のほとんどのキーコードKeyEventは 16 進コードです。

プラン:

  1. Stringchar[]
  2. for-each を介してchar[]
  3. の16進値を見つける(int)char
  4. keyPress( の 16 進値(int)char)
  5. keyRelease( の 16 進値(int)char)

私がこれまでに持っているもの:

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
        }
    }
}
4

2 に答える 2

1

これは機能しますが、「Hello World é ç」などの特殊文字には問題があります。出力を参照してください。
\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") を使用 --> 私の PC では 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
于 2013-06-18T13:26:09.367 に答える
1

ASCII 文字のキーコードは、大文字の char 値と同じです。したがって、次のことができます。

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

このループでは、文字列 "Hello World" は "hello world" になります。感嘆符のようなものには機能しません。

さらに、ロボットに大文字を送信させたくない場合は、Shift キーまたは Caps Lock キーの押下をシミュレートする必要があります。

ただし、この方法が信頼できるかどうかはわかりません。java.awt.event.KeyEvent から正しいキー コード定数を返すために、多くの if/else (または切り替え) を行うこともできます。

于 2013-06-18T12:51:21.610 に答える