Java Robot Linux可以激发所有关键事件

时间:2015-04-06 11:48:48

标签: java linux unicode keyboard-events awtrobot

我试图从键盘输入所有可能的键,无论使用Java Robot的语言或布局如何。

我们编写了一个超类,它有一些常用方法可以将字符KeyEvent.VK_A打印到KeyEvent.VK_Z,将数字KeyEvent.VK_0打印到KeyEvent.VK_9以及SHIFT键组合。

现在来到具体的部分,如果我们有意大利或土耳其键盘有Unicode存在或任何其他特殊字符。如何激发相同的按键或键盘释放? (因为这些字符没有有效的KeyCode)

假设我们有ò,à,ù或*,§等

我在JDK 1.6上尝试这个。这是代码片段

protected void keyPressRelease(int keyCode){

    try{
        this.robot.keyPress(keyCode);
        this.robot.keyRelease(keyCode);
    }catch(java.lang.IllegalArgumentException e){
        logger.error("keyPressRelease() No key present "+KeyEvent.getKeyText(keyCode)+ " for Key Code :"+keyCode);
        logger.error("Error in typing ",e);
        this.errorBuilder.append("IllegalArgumentException keyPressRelease(), No key present "+KeyEvent.getKeyText(keyCode)+ " for Key Code :"+keyCode+"<br\\>");
    }catch(Exception e){
        logger.error("keyPressRelease() No key present "+KeyEvent.getKeyText(keyCode)+ " for Key Code :"+keyCode);
        logger.error("Error in typing ",e);
        this.errorBuilder.append("Exception keyPressRelease(), No key present "+KeyEvent.getKeyText(keyCode)+ " for Key Code :"+keyCode+"<br\\>");
    }
}//End of keyPressRelease()


protected void shiftKeyPress(int keyCode){

    this.robot.keyPress(KeyEvent.VK_SHIFT);

    try{

        this.robot.keyPress(keyCode);                    
        this.robot.keyRelease(keyCode);

    }catch(java.lang.IllegalArgumentException e){
        logger.error("shiftKeyPress() No key present "+KeyEvent.getKeyText(keyCode)+ " for Key Code :"+keyCode);
        this.errorBuilder.append("Exception shiftKeyPress(), No key present "+KeyEvent.getKeyText(keyCode)+ " for Key Code :"+keyCode+"<br\\>");
    }
    this.robot.keyRelease(KeyEvent.VK_SHIFT);

}//End of shiftKeyPress()



protected void typeLableName(int keyCode){
    String  labelName = KeyEvent.getKeyText(keyCode);
    type(labelName+" ");

    labelName = null;
}//End of typeLableName

//Windows 7 , normal keyboard, from Control panel changed the layout to Italy
private void checkSplCharacters(){

    this.keyPressRelease(KeyEvent.VK_ENTER);

    /*Start of  --> § Cedilla Small*/
    this.typeLableName(KeyEvent.VK_BACK_SLASH);
    this.keyPressRelease(KeyEvent.VK_BACK_SLASH);
    this.keyPressRelease(KeyEvent.VK_ENTER);

    this.typeLableName(KeyEvent.VK_BACK_SLASH);
    this.shiftKeyPress(KeyEvent.VK_BACK_SLASH);
    this.keyPressRelease(KeyEvent.VK_ENTER);
    /*End  of  --> § Cedilla Small*/        

    /*Start of  --> ì Grave Small*/
    this.typeLableName(KeyEvent.VK_PLUS);
    this.keyPressRelease(KeyEvent.VK_PLUS);     
    this.keyPressRelease(KeyEvent.VK_ENTER);

    this.typeLableName(KeyEvent.VK_PLUS);
    this.shiftKeyPress(KeyEvent.VK_PLUS);
    this.keyPressRelease(KeyEvent.VK_ENTER);
    /*End  of  --> ì Grave Small*/


}//End of checkSplCharacters

记住了一些要点

  1. 虚拟点,是否可以知道键的位置,表示以行和格式的格式映射。列?如果是这样,哪个API将返回键盘行? &安培;然后我将尝试在该行中循环运行&amp;那把钥匙。

  2. 使用Numpad + ALT键读取一些地方,这似乎适用于Windows&amp;如果Numpad不存在怎么办? 参考here

  3. 我们可以为同一个&amp;和我们创建自己的自定义映射吗?有没有可能的方法来覆盖?(任何代码片段)

  4. 或者为unicode / special characters键入/执行java机器人的任何其他可能方式。

    尝试下面的事情

    基本上想要使用java Robot输入ò,à,ù或*,§。所以String a =“ò,à,ù或*,§”; // Unicode字符         尝试{         机器人机器人=新机器人();         for(int i = 0; i

         robot.keyPress(?);//What would be the equivalent key code for above Unicodes
        }
    
        }catch(Exception e){
        } 
    

0 个答案:

没有答案