Publié le 06/01/2011
Auteur axel
Réseaux sociaux
0 partages
0 tweets
0 plus
2 commentaires

Simuler l'appui d'une touche du clavier

Comment simuler keybd_event ou SendKeys en JAVA ? La fonction robot.keyPress envoie un évènement clavier en simulant l'appui d'une touche. Le résultat est exactement le même que lorsque l'utilisateur appuie sur une touche de son clavier.

Envoyer un evenement clavier

L'exemple SendKey ouvre l'application Notepad.exe sous Windows et se charge d'écrire 'axel' en envoyant les 4 lettres une à une.
import java.awt.AWTException
import java.awt.Robot
import java.awt.event.KeyEvent
import java.io.IOException
import java.util.logging.Level
import java.util.logging.Logger
 
/**
 * Ouvrir et écrire dans NotePad
 * @author fobec.com 2010
 */
public class SendKey {
 
    public SendKey() {
        /**
         * Lancer NotePad sous Windows
         */
        try {
            Runtime.getRuntime().exec("notepad");
        } catch (IOException ex) {
            Logger.getLogger(SendKey.class.getName()).log(Level.SEVERE, null, ex);
        }
/**
 * Ecrire dans NotePad
 */
        try {
            Robot robot = new Robot();
            /**
             * Fixer le delai entre chaque mouvement à 250 ms
             */
            robot.setAutoDelay(250);
            robot.setAutoWaitForIdle(false);
            /**
             * Envoyer les touches axel une à une
             */
            robot.keyPress(KeyEvent.VK_A);
            robot.keyPress(KeyEvent.VK_X);
            robot.keyPress(KeyEvent.VK_E);
            robot.keyPress(KeyEvent.VK_L);
            /**
             * Quitter l'application
             */
            System.exit(0);
 
        } catch (AWTException ex) {
            Logger.getLogger(SendKey.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
 
    public static void main(String[] args) throws AWTException, IOException {
        SendKey sendKey = new SendKey();
    }
} 

Cette méthode peut etre utilisée pour automatiser certaines taches. Par exemple, une application JAVA simule une saisie clavier en envoyant une série de caractère.

Ajouter un commentaire

Les champs marqués d'un * sont obligatoires, les adresses emails se sont pas publiées.
avatar Daxentuut

Publié par Daxentuut

le 06/03/2013 à 16:32:47

Avec les imports c'est mieux :

import java.awt.AWTException
import java.awt.Robot
import java.awt.event.KeyEvent
import java.io.IOException
import java.util.logging.Level
import java.util.logging.Logger

avatar OmegaPlatypus

Publié par OmegaPlatypus

le 05/08/2013 à 11:08:35

Dans mon cas, plusieurs lettres etaient repetes plusieurs fois, dont la derniere a l'indfiniment. En ajoutant robot.keyReleaseKeyEvent.VK_A, robot.keyReleaseKeyEvent.VK_X, etc. apres chacune des frappes, le probleme est resolu.

A noter aussi que la methode Runtime.getRuntime.exec fonctionne parfaitement sous linux, avec en parametre gedit par exemple. On peut egalement passer des parametres :Runtime.getRuntime.execgedit info.txt

A lire aussi

Réseaux sociaux
Présentation de l'article
Catégorie
java - sources
Mise a jour
06/01/2011
Visualisation
vu 9218 fois
Public
Internaute
Auteur de la publication
Axel
Membre junior
Auteur de 51 articles
|BIO_PSEUDO|
Commentaires récents

Publié par serenite489 dans java

Merci beaucoup Axel.
C'est genial.

Publié par Fobec dans tuto

Merci pour la remarque Toluar,
Les user-agent sont effectivement un bon indicateur pour les utilisateurs. Les crawlers et robots en tout genre ne prennent pas toujours la peine de renseigner cette...

Publié par Toluar dans tuto

Je viens de lire votre article que seulement aujourd'hui.
Une autre solution consiste a regarder le user-agent utilise par le navigateur du visiteur. Les crawlers sont clairement identifies ;-)...

Publié par fobec dans java

La boucle de lecture est corrigée et prend en compte l'état pause. Sympa d'avoir signaler l'erreur

Publié par Oscar dans java

Je vous remercie pour ce tuto il ma permis non seulement de gerer les couleurs dans les cellules mais aussi de positionner son contenu texte.