Java 로봇 클래스을 사용하여 debian lenny를 사용하여 vps 서버에서 키보드를 시뮬레이션하려고합니다. 내가이 명령을 사용하여 결과를보고하고있다 (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)의 의견 - 코드를 얻은 것으로 추정되는 곳에서 - keypresses 대신 Clipboard를 사용하는 마지막 주석입니다. - –
@ KonstantinV.Salikhov - 응답 해 주셔서 감사합니다. 불행히도 이것도 작동하지 않았지만, 내 문제에 대한 해결책을 찾는데 도움이되었습니다. 주요 문제는 java 코드가 아니었지만 shift/ctrl/altt와 다른 문자를 좋아하지 않는 thix x11vnc 앱이었습니다. 대신 tightvncserver를 사용 했으므로 모든 것이 잘 작동합니다. – user1840547