Je suis en projet informatique et je dois commander un jeu (TrackMania pour ceux qui connaissent) avec des SunSPOT (http://www.sunspotworld.com/) fabriqué par Sun et programmé en Java. Mon souci est que le robot fourni par Java gère très bien l'interaction avec Windows et les produits Microsoft en général. Mais dés que l'on passe dans les jeux qui gèrent différemment les événements claviers le robot de Java ne permet plus de commander le clavier. En effet pour Trackmania, l'événement flèche droite du robot Java devient l'événement touche 8 du clavier numérique.
Alors question, comment gérer au mieux les événements claviers, comment les commander de manière plus proche du hardware que par le robot Java qui n'interagit qu'avec Windows ? Si vous avez une idée, ça m'intéresse.
Marsh Posté le 04-06-2009 à 12:28:21
Bonjour,
Je suis en projet informatique et je dois commander un jeu (TrackMania pour ceux qui connaissent) avec des SunSPOT (http://www.sunspotworld.com/) fabriqué par Sun et programmé en Java. Mon souci est que le robot fourni par Java gère très bien l'interaction avec Windows et les produits Microsoft en général. Mais dés que l'on passe dans les jeux qui gèrent différemment les événements claviers le robot de Java ne permet plus de commander le clavier. En effet pour Trackmania, l'événement flèche droite du robot Java devient l'événement touche 8 du clavier numérique.
Alors question, comment gérer au mieux les événements claviers, comment les commander de manière plus proche du hardware que par le robot Java qui n'interagit qu'avec Windows ? Si vous avez une idée, ça m'intéresse.
Code de la gestion du clavier :
package org.sunspotworld;
import java.awt.AWTException;
import java.awt.Robot;
import java.awt.event.KeyEvent;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
*
* @author
*/
public abstract class AKeyboard extends AOutput {
Robot r;
public AKeyboard() {
try {
r = new Robot();
} catch (AWTException ex) {
Logger.getLogger(AKeyboard.class.getName()).log(Level.SEVERE, null, ex);
}
}
protected void setkeyboard(int eve) {
switch (eve) {
case LEFTARROW:
r.keyPress(KeyEvent.VK_LEFT);
r.keyRelease(KeyEvent.VK_LEFT);
System.out.println("flèche de gauche" );
break;
case DOWNARROW:
r.keyPress(KeyEvent.VK_DOWN);
r.keyRelease(KeyEvent.VK_DOWN);
System.out.println("flèche du bas" );
break;
case UPARROW:
r.keyPress(KeyEvent.VK_UP);
r.keyRelease(KeyEvent.VK_UP);
System.out.println("flèche du haut" );
break;
case RIGHTARROW:
r.keyPress(KeyEvent.VK_RIGHT);
r.keyRelease(KeyEvent.VK_RIGHT);
System.out.println("flèche de droite" );
break;
case ACCARROW:
//mettre quoi ?
System.out.println("accelération" );
break;
case BRAKEARROW:
System.out.println("freinage" );
break;
case F5:
r.keyPress(KeyEvent.VK_F5);
r.keyRelease(KeyEvent.VK_F5);
System.out.println("F5" );
break;
case ESCAPE:
r.keyPress(KeyEvent.VK_ESCAPE);
r.keyRelease(KeyEvent.VK_ESCAPE);
System.out.println("Echap" );
break;
case ALTF4:
r.keyPress(KeyEvent.VK_ALT);
r.keyPress(KeyEvent.VK_F4);
r.keyRelease(KeyEvent.VK_F4);
r.keyRelease(KeyEvent.VK_ALT);
System.out.println("ALT F4" );
break;
}
}
}
package org.sunspotworld;
import java.awt.AWTException;
import java.awt.Robot;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
*
* @author
*/
public class Keyboard extends AKeyboard {
int typeMsg;
Keyboard() {
try {
r = new Robot();
} catch (AWTException ex) {
Logger.getLogger(Keyboard.class.getName()).log(Level.SEVERE, null, ex);
}
}
public void do_detect() {
typeMsg = ra.getTypeMsg();
switch (typeMsg) {
case Radio.RIGHTARROW:
this.setkeyboard(RIGHTARROW);
break;
case Radio.LEFTARROW:
this.setkeyboard(LEFTARROW);
break;
case Radio.UPARROW:
this.setkeyboard(UPARROW);
break;
case Radio.DOWNARROW:
this.setkeyboard(DOWNARROW);
break;
/* case SunSpotDesktopMouse.SPECIAL:
if (d.getSpecial() == 1) {
this.setkeyboard(F5);
}
if (d.getSpecial() == 2) {
this.setkeyboard(ESCAPE);
}
if (d.getSpecial() == 3) {
this.setkeyboard(ALTF4);
}
break;*/
}
}
}
Merci de votre aide
Cordialement,
Yves