Simuler une touche avec robot.keyPress()

ocbslim Messages postés 5 Date d'inscription dimanche 14 novembre 2004 Statut Membre Dernière intervention 21 mai 2007 - 17 mai 2007 à 00:09
ocbslim Messages postés 5 Date d'inscription dimanche 14 novembre 2004 Statut Membre Dernière intervention 21 mai 2007 - 21 mai 2007 à 19:07
ocbslim

Bonjour,

Je suis en train de réalisé un module qui simule le fait de taper une chaine de caractere au clavier avec robot.keypress(). Cette chaine est passée àune fonction en parametre.

    public void writte(String text){
        int keyCode;
        for (int i = 0 ; i < text.length() ;i++){
            keyCode = text.charAt(i);
            robot.keyPress(keyCode);
            robot.keyRelease(keyCode);    
        }
    }

Mais petite surprise au niveau du code ascii. Lorsque le 'char' a simuler est 'A', aucun probleme, getKeyCode() 65 , ce qui est conforme au code ascii. En revanche lorsque le char est 'a' , getKeyCode()1 alors que sont code ascii est
97 .
Je ne comprend pas pourqu'oi???
D'autre part, j'ai fait un test avec un keyLister sur un JPanel :

public void keyPressed(KeyEvent e) {
        System.out.println("Key : "+e.getKeyChar()+"    "+e.getKeyCode());
}


Si je tape 'A'  il m'ecrit "Key : A    65", jusque la normal
Si je tape 'a'  il m'ecrit "Key : a    65", le meme code ascii Pouvez-vous m'expliquer ???

Merci d'avance.
A voir également:

5 réponses

Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 38
17 mai 2007 à 15:57
Salut:

Tu dois passer aux méthodes keyPress () et keyRelease un argument de type VK_* ce sont les constantes de la classe KeyEvent.

Donc pour chaque lettre de l'alphabet tu dois savoir quelle constante y correspond.

Une solution simpliste:

int keyCode (char c) {
    switch (c) {
       case 'a':
       case 'A':
          return KeyEvent.VK_A;

       //
       // Le reste de l'alphabet
       //
    }
}

Pour écrire un caractère donnée:

void printKey (char c) {
    Robot robot = new Robot ();
   
    boolean isUpper = (
(c <= 'Z') && (c >= 'A'));


    // Maintenir la touche SHIFT enfoncée
    if (isUpper) {
       robot.pressKey (VK_SHIFT);
    }

    // Taper le caractère donné
    robot.pressKey (keyCode (c));
   
    // Relacher la touche SHIFT
    if (isUpper) {
       robot.releaseKey (VK_SHIFT);
    }
}
0
Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 38
17 mai 2007 à 16:03
Salut:

int keyCode (char c) {
    switch (Character.toUpperCase (c)) {
       case 'A':
          return KeyEvent.VK_A;
       //
       // Le reste de l'alphabet
       //
    }
}
0
ocbslim Messages postés 5 Date d'inscription dimanche 14 novembre 2004 Statut Membre Dernière intervention 21 mai 2007
17 mai 2007 à 20:03
Merci pour la démarche je pense que je vais suivre tes conseils.

Autre petite question. Je me demandais s'il était possible d'iconiser l'application dans la barre des taches (sans utiliser JNI ou SWT)?

Merci d'avance
0
Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 38
17 mai 2007 à 20:54
Salut:

Franchement, je ne sais pas j'ai jetter un coup d'oeil rapide sur la documentation mais je n'ai pas vu quelque chose qui permet de faire ça.

Je ne sais pas si c'est possible de le faire en Java pure.

Si je trouve quelque chose d'importante je te contacterais.

Bye.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ocbslim Messages postés 5 Date d'inscription dimanche 14 novembre 2004 Statut Membre Dernière intervention 21 mai 2007
21 mai 2007 à 19:07
Je te remercie a la prochaine.
0
Rejoignez-nous