2012-11-21 61 views
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,也沒有發生任何事情)

+0

在評論(http://gruimed.blogspot.ru/2009/09/using-java-robot-to-type-text-strings.html) - 我想你已經獲得了你的代碼 - 那裏是使用剪貼板而不是按鍵的最後一條評論 - 您可以試試/ –

+1

@ KonstantinV.Salikhov - 感謝您的回覆。不幸的是,這並沒有工作,但它幫助我找到解決我的問題的方法。主要問題不是java代碼,而是不喜歡shift/ctrl/altt和其他字符的thix x11vnc應用程序。我使用tightvncserver,現在一切正常。 – user1840547

回答

2

答案是 - 不要使用x11vnc,shift/ctrl/alt鍵不在那裏工作。改爲使用tightvncserver

相關問題