2
我想模擬我的vps服務器上的鍵盤與debian lenny使用Java機器人類。我看使用這些命令的結果(與vncviewer的連接):Linux上的Java機器人 - 沒有大寫字符(使用x11vnc)
Xvfb :2 -screen 0 1366x768x16 & fluxbox & x11vnc -display :2 -bg -usepw -nomodtweak -xkb
我可以輸入小寫字母,但它不以大寫字母工作。我用下面的代碼從互聯網+我的修改:
import java.awt.AWTException;
import java.awt.Robot;
import java.awt.event.KeyEvent;
public class TypingRobot extends Robot {
public TypingRobot() throws AWTException {
super();
// TODO Auto-generated constructor stub
}
public void keyType(int keyCode) {
keyPress(keyCode);
delay(50);
keyRelease(keyCode);
}
public void keyType(int keyCode, int keyCodeModifier) {
keyPress(keyCodeModifier);
keyPress(keyCode);
delay(50);
keyRelease(keyCode);
keyRelease(keyCodeModifier);
}
public void type(String text) {
//String textUpper = text.toUpperCase();
String textUpper = text;
for (int i=0; i<text.length(); ++i) {
typeChar(textUpper.charAt(i));
}
}
private void typeChar(char c) {
boolean shift = true;
int keyCode;
switch (c) {
case '~':
keyCode = (int)'`';
break;
case '!':
keyCode = (int)'1';
break;
case '@':
keyCode = (int)'2';
break;
case '#':
keyCode = (int)'3';
break;
case '$':
keyCode = (int)'4';
break;
case '%':
keyCode = (int)'5';
break;
case '^':
keyCode = (int)'6';
break;
case '&':
keyCode = (int)'7';
break;
case '*':
keyCode = (int)'8';
break;
case '(':
keyCode = (int)'9';
break;
case ')':
keyCode = (int)'0';
break;
case ':':
keyCode = (int)';';
break;
case '_':
keyCode = (int)'-';
break;
case '+':
keyCode = (int)'=';
break;
case '|':
keyCode = (int)'\\';
break;
case '?':
keyCode = (int)'/';
break;
case '{':
keyCode = (int)'[';
break;
case '}':
keyCode = (int)']';
break;
case '<':
keyCode = (int)',';
break;
case '>':
keyCode = (int)'.';
break;
case '/':
keyCode = 47;
shift = false;
break;
case ' ':
keyCode = (int)' ';
shift = false;
break;
case '.':
keyCode = (int)'.';
shift = false;
break;
default:
if((int)c>=65 && (int)c<=90){
keyCode = (int)c;
}
else{
keyCode = (int)c-32;
shift = false;
}
}
if (shift)
keyType(keyCode, KeyEvent.VK_SHIFT);
else
keyType(keyCode);
} }
我的輸入是這樣的:
robot.type("Some string...");
,但它改變了大寫字母小的。我認爲我的服務器存在一些問題,因爲此代碼的Windows版本適合我。我可以在VNCviewer上按SHIFT,它可以工作,但可能Robot/x11vnc或相關的東西不能爲我按下它。
任何想法如何啓用SHIFT鍵? (我也測試了CAPSLOCK,也沒有發生任何事情)
在評論(http://gruimed.blogspot.ru/2009/09/using-java-robot-to-type-text-strings.html) - 我想你已經獲得了你的代碼 - 那裏是使用剪貼板而不是按鍵的最後一條評論 - 您可以試試/ –
@ KonstantinV.Salikhov - 感謝您的回覆。不幸的是,這並沒有工作,但它幫助我找到解決我的問題的方法。主要問題不是java代碼,而是不喜歡shift/ctrl/altt和其他字符的thix x11vnc應用程序。我使用tightvncserver,現在一切正常。 – user1840547