我试图打印一些字符,例如:'!',' @',' \' 但它根本不起作用...... 大写字母也不起作用......
我有这个字符串:
String admUsr = "HOMP'\'adm03!@";
但是当我尝试打印时:
irf.Send(admUsr);
仅打印:
hompadm03
而不是
HOMP \ adm03!@
我的发送功能有什么问题?
// mandar textos
public void Send(int i)
{
try {
r = new Robot();
r.delay(40);
r.keyPress(i);
r.keyRelease(i);
} catch (AWTException ex) {
Logger.getLogger(iRobot_Functions.class.getName()).log(Level.SEVERE, null, ex);
}
}
public void Send(String s)
{
byte[] bytes = s.getBytes();
for (byte b : bytes)
{
try {
int code = b;
// keycode only handles [A-Z] (which is ASCII decimal [65-90])
if (code > 96 && code < 123) code = code - 32;
r = new Robot();
r.delay(40);
r.keyPress(code);
r.keyRelease(code);
} catch (AWTException ex) {
Logger.getLogger(iRobot_Functions.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
答案 0 :(得分:1)
您错误地使用了keyPress()
。请参阅documentation。它的论点不是文本特征;这是一个关键代码。键码是KeyEvent类的字段之一。恰好,“普通”ASCII小写字母与键码具有相同的字符代码。
您需要做的是:
阅读KeyEvent类的文档,找到Shift键的键码。
要发送大写字母,您需要为以下事件调用keyPress / keyRelease:按住Shift键;按下字母键;信密钥发布; Shift键已释放。
要发送标点符号,请查看键盘并查看标点符号所在的键。然后使用上面的shift-key组合。
答案 1 :(得分:1)
关于错误使用KeyPress()方法, DodyCodeExcpetion 已提及。 所以我想谈谈另一个问题。
admUsr字符串。
String admUsr = "HOMP'\'adm03!@";
“\”是一个Escape Sequence。所以预期的输出应该是
HOMP''adm03!@
而不是
HOMP\adm03!@
您应该以char级别而不是字节级别处理String。 你可以看到char & byte here
的定义使用KeyEvent.getExtendedKeyCodeForChar(int)
方法查明是否存在unicode字符的扩展密钥代码。这是documentation
public void send(String s) {
if (null == s) return;
Robot r = null;
char[] chars = s.toCharArray();
try {
for (char c : chars) {
int code = c;
int keyCode = KeyEvent.getExtendedKeyCodeForChar(code);
r = new Robot();
r.delay(40);
r.keyPress(keyCode);
r.keyRelease(keyCode);
}
} catch (AWTException ex) {
System.err.println(ex.getMessage());
}
}