我正在尝试使机器人打字方法变得简单得多。KeyEvent中的大部分密钥码都是十六进制码。
计划:
String到char[]char[](int)char的十六进制值(int)char的十六进制值)(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
}
}
}发布于 2013-06-18 12:51:21
ASCII字母的键码等于它们的大写字符值。这样你就可以做以下事情:
char[] chars = phrase.toUpperCase().toCharArray();
for (char letter:chars)
{
int keyCode = (int)letter;
r.keyPress(keyCode);
r.keyRelease(keyCode);
}使用这个循环,字符串"Hello“将给出"hello world”。它不适用于感叹号之类的东西。
此外,如果你不让机器人发送大写字母,你将不得不模拟按下换档键或盖帽锁键。
不过,不确定这种方法是否可靠。为了从java.awt.event.KeyEvent返回正确的键代码常量,您还可以做很多if/ the (或开关)操作。
发布于 2013-06-18 13:26:09
这项工作,但它将有问题的特殊字符,如“你好世界”,见输出。
它希望使用\n 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 0xffffffe7https://stackoverflow.com/questions/17168766
复制相似问题