linux上的Java Robot-无大写字符(使用x11vnc)

linux上的Java Robot-无大写字符(使用x11vnc),java,linux,shift,awtrobot,Java,Linux,Shift,Awtrobot,我正试图用debian lenny使用Java Robot类在我的vps服务器上模拟键盘。我正在使用这些命令(连接VNCviewer)查看结果: 我可以打小写字母,但不能用大写字母。我使用了以下来自internet的代码+我的修改: import java.awt.AWTException; import java.awt.Robot; import java.awt.event.KeyEvent; public class TypingRobot extends Robot { publi

我正试图用debian lenny使用Java Robot类在我的vps服务器上模拟键盘。我正在使用这些命令(连接VNCviewer)查看结果:

我可以打小写字母,但不能用大写字母。我使用了以下来自internet的代码+我的修改:

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);
 } }
但它将大写字母改为小写字母。我认为我的服务器有一些问题,因为这段代码的Windows版本对我来说运行良好。我可以在VNCviewer上按下SHIFT键,它可以工作,但可能Robot/x11vnc或其他相关的东西不能为我按下它


有没有办法启用SHIFT键?(我也测试了CAPSLOCK,也没有发生任何事情)

答案是-不要使用x11vnc,shift/ctrl/alt键在那里不起作用。使用tightvncserver

在()的注释中-我想您已经获得了您的代码-最后一条注释使用剪贴板而不是按键-您可以尝试一下//KonstantinV.Salikhov-感谢您的回复。不幸的是,这也不起作用,但它帮助我找到了解决问题的办法。主要问题不是java代码,而是thix x11vnc应用程序,它不喜欢shift/ctrl/altt和其他字符。我改用了tightvncserver,现在一切正常。
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...");