Execution d'un process via Java : Comment "simuler" le clavier ???

Execution d'un process via Java : Comment "simuler" le clavier ??? - Java - Programmation

Marsh Posté le 03-12-2003 à 18:31:22    

:hello:
 
 
Mon programme Java doit pouvoir executer un programme C qui fonctionne en ligne de commande.. (sous environnement Windows)
Oubliez les techno J2EE, pas le temps de le faire... :/
 
 
Mon programme Java doit donc :
lancer le programme (appelons le prog.exe) avec un argument (path du fichier a ouvrir)
Simuler la saisie '1' sur la ligne de commande
Simuler la saisie '4' sur la ligne de commande
Simuler la saisie 'Result.txt' sur la ligne de commande
 
 
Je pensais donc lancer un Process qui lancement ce programme et simulerait le clavier..
Pour cela :
 
 

Code :
  1. Process process_l = Runtime.getRuntime().exec("prog" + filePath_p);


(le process est correctement crée (défini dans le PATH), il me bouffe même tout mon CPU si j'oublie de le détruire..  :D )
 
 
Ensuite, je cherche à simuler l'appui sur la touche '1' en ecrivant sur le flux d'entrée avec :
 

Code :
  1. process_l.getOutputStream().write(new String("1" ).getBytes());


(comment on simule un retour clavier ?? \n \r ???)
 
 
Ma facon de faire est-elle correcte ???
Ai-je oublier quelque chose ???
Y'a t-il un meilleur moyen de le faire ???
 
Le problème C que je n'arrive pas à récupérer le flux de sortie (
process_l.getInputStream()) qui me permettrait d'avoir une visibilité sur ce qui se passe (a première vue rien..)
(C indiqué dans la JavaDoc qu'essayer de lire sur ce flux peut bloquer le process sur certaines plateforme ce qui est exactement mon cas ici.. Je vais essayer d'utiliser des Pipe pour voir si cela fonctionne mieux..)
 
 
Merciiii
 :jap:


Message édité par Dephi le 03-12-2003 à 18:33:36
Reply

Marsh Posté le 03-12-2003 à 18:31:22   

Reply

Marsh Posté le 04-12-2003 à 13:55:01    

:bounce:  
 
personne pour m'aider ???
 :cry:

Reply

Marsh Posté le 04-12-2003 à 13:58:46    

La classe java.awt.Robot est ton amie.


---------------
Les Vers Solitaires, on aime ... ou pas !
Reply

Marsh Posté le 04-12-2003 à 14:07:22    

El_gringo a écrit :

La classe java.awt.Robot est ton amie.


implements Asimov.FirstLaw, Asimov.SecondLaw, Asimov.ThirdLaw ???
A+,  


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 04-12-2003 à 15:08:49    

El_gringo a écrit :

La classe java.awt.Robot est ton amie.


 
Merci..
C cool, j'arrive à simuler le clavier..  :)  
Mais comment faire pour "brancher le clavier" sur l'entrée standard du process ??
 
J'ai beau essayé, je n'y arrive vraiment pas....
Je peux récupérer l'OutputStream du process, mais je ne vois pas comment lui assigner un stream en entrée/sortie...  :??:  
 :cry:  
 
 
gilou > j'suis complétement HS, j'ai bien mis 5 minutes a comprendre ta blague...  :whistle:  
(entre temps, j'ai été chercher la classe Asimov dans la JavaDoc..   :sweat: )


Message édité par Dephi le 04-12-2003 à 15:09:15
Reply

Marsh Posté le 04-12-2003 à 15:20:40    

C bon j'ai réussi !!!!   :D  
 
 
Finalement, je n'ai pas besoin de notre ami le Robot..
Un simple  
 

Code :
  1. PrintStream printStream_l = new PrintStream(process_l .getOutputStream());
  2. printStream_l.println("4" );
  3. printStream_l.println("C:\\Zapotek.txt" );
  4. printStream_l.println("0" );
  5. printStream_l.flush();


 
 
Suffit à mon bonheur !!!  :)  
 
Me demander pas pkoi je n'avais pas réussi à faire de même avec les autres classes de flux (certainement mauvais codage du retour chariot)
 
Merciii a vous en tout cas..
 :jap:  
 

Reply

Marsh Posté le 04-12-2003 à 15:21:57    

[:totoz]


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 04-12-2003 à 15:24:02    


quoi ??
 
(fais pas ton greg :o)


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 04-12-2003 à 15:33:10    

bin pq il fait pas avec robot, si son process a le focus ca marche sans problème.
 
donc mon [:totoz] est parce qu'il a réinventé la roue (et comme un porc en plus)


Message édité par darklord le 04-12-2003 à 15:33:25

---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 04-12-2003 à 15:43:46    

DarkLord a écrit :

bin pq il fait pas avec robot, si son process a le focus ca marche sans problème.
 
donc mon [:totoz] est parce qu'il a réinventé la roue (et comme un porc en plus)


y a pas longtemps tu croyais que le java.awt.Robot était pas capable de balancer des événements à un process externe, alors fais pas ton kéké  :o
 
je vois pas le problème d'envoyer des caractères à un process qui attend des évenements claviers ...


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 04-12-2003 à 15:43:46   

Reply

Marsh Posté le 04-12-2003 à 15:58:49    

benou a écrit :


y a pas longtemps tu croyais que le java.awt.Robot était pas capable de balancer des événements à un process externe, alors fais pas ton kéké  :o
 
je vois pas le problème d'envoyer des caractères à un process qui attend des évenements claviers ...


moi non plus, surtout que si tu utilises awt, ben ca plante si t'es pas sous un environnement graphique (au pif, un unix sans X installé).

Reply

Marsh Posté le 04-12-2003 à 16:10:09    

lorill a écrit :


si tu utilises awt, ben ca plante si t'es pas sous un environnement graphique (au pif, un unix sans X installé).


peut être pas la classe Robot ...


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 04-12-2003 à 16:13:09    

benou a écrit :


peut être pas la classe Robot ...


je sais pas s'ils se sont amusés a faire un découpage par classe...
faudrait vérifier.

Reply

Marsh Posté le 04-12-2003 à 16:16:28    

[gedoc@linasi gedoc]$ cat Awt.java


Code :
  1. import java.awt.Robot;
  2. public class Awt
  3. {
  4.   public static void main(String [] args)
  5.   throws Exception
  6.   {
  7.     Robot r = new Robot();
  8.   }
  9. }



[gedoc@linasi gedoc]$ java Awt
Exception in thread "main" java.lang.UnsatisfiedLinkError: /usr/local/j2sdk/jre/lib/i386/libawt.so: libXp.so.6: cannot open shared object file: No such file or directory
        at java.lang.ClassLoader$NativeLibrary.load(Native Method)
        at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1560)
        at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1477)
        at java.lang.Runtime.loadLibrary0(Runtime.java:788)
        at java.lang.System.loadLibrary(System.java:834)
        at sun.security.action.LoadLibraryAction.run(LoadLibraryAction.java:50)
        at java.security.AccessController.doPrivileged(Native Method)
        at sun.awt.NativeLibLoader.loadLibraries(NativeLibLoader.java:38)
        at sun.awt.DebugHelper.<clinit>(DebugHelper.java:29)
        at sun.awt.X11GraphicsEnvironment.<clinit>(X11GraphicsEnvironment.java:53)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:141)
        at java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment(GraphicsEnvironment.java:62)
        at java.awt.Robot.<init>(Robot.java:73)
        at Awt.main(Awt.java:8)


 
boom :o

Reply

Marsh Posté le 04-12-2003 à 16:31:02    


:whistle:  
 
enfin bref, pas besoin du robot quoi ...
[:neowen]


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 04-12-2003 à 16:39:41    

DarkLord a écrit :

bin pq il fait pas avec robot, si son process a le focus ca marche sans problème.
 
donc mon [:totoz] est parce qu'il a réinventé la roue (et comme un porc en plus)


 
Justement, l'utilisation du robot n'influence pas mon Process..
 :(  
C pour cela que j'ai essayé autre chose..
 
Sinon, ca tournera sous du Win donc y'aurait pas eu de souci awt...
 
 

Reply

Marsh Posté le 04-12-2003 à 20:36:16    

benou a écrit :


y a pas longtemps tu croyais que le java.awt.Robot était pas capable de balancer des événements à un process externe, alors fais pas ton kéké  :o


 
ptain j'ai reconnu mon erreur, tu veux que je fasse quoi, que je te cire les pompes? [:kiki]

Reply

Marsh Posté le 04-12-2003 à 21:02:18    

DarkLord a écrit :


ptain j'ai reconnu mon erreur, tu veux que je fasse quoi, que je te cire les pompes? [:kiki]


ca se serait cool ! [:dawa]
 
nan, c'est juste que ce serait bien que tu évitse de trainer le mec plus bas que terre parce qu'il connait pas un truc que tu viens tout juste d'apprendre ...
(d'autant plus que c'était pas forcément le plus adapté).
 
enfin voilà quoi.
 
C'était aussi une occasion d'utiliser le mot "kéké" ((c) Taiche)qui me fait bien rire. ;)


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 04-12-2003 à 21:05:51    

benou a écrit :


C'était aussi une occasion d'utiliser le mot "kéké" ((c) Taiche)qui me fait bien rire. ;)


Moi j'dis "dindon" mais plus rarement "kéké" :o


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
Reply

Marsh Posté le 04-12-2003 à 21:06:32    

DarkLord a écrit :


donc mon [:totoz] est parce qu'il a réinventé la roue (et comme un porc en plus)


 
uoais enfin :
 

Citation :

PrintStream printStream_l = new PrintStream(process_l .getOutputStream());


 
reinventer la roue en une ligne ca le fait pas mal je trouve :o

Reply

Marsh Posté le 04-12-2003 à 21:08:56    

Taiche a écrit :


Moi j'dis "dindon" mais plus rarement "kéké" :o


kéké était plus adapté dans ce cas [:aloy]


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 04-12-2003 à 21:49:27    

oh vos gueules hein :o

Reply

Marsh Posté le 04-12-2003 à 23:23:00    

DarkLord a écrit :

bin pq il fait pas avec robot, si son process a le focus ca marche sans problème.
 
donc mon [:totoz] est parce qu'il a réinventé la roue (et comme un porc en plus)

:heink: TOTOZ T CON OU QUOI


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 05-12-2003 à 06:59:17    

the real moins moins a écrit :

:heink: TOTOZ T CON OU QUOI


 
mais encore ...


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 05-12-2003 à 13:58:36    

ben le coup des inpustream et outputstream c'est exactement la bonne manière de faire ce qu'il devait faire (envoyer un flux sur l'entrée de son process), il n'a rien inventé ou quoi
 
(désolé pour le gros mot :o)


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 05-12-2003 à 14:00:55    

voir 4 posts ci dessus :o


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 05-12-2003 à 16:52:04    

chrisbk a écrit :


 

Citation :

PrintStream printStream_l = new PrintStream(process_l .getOutputStream());


 
reinventer la roue en une ligne ca le fait pas mal je trouve :o


 
 :jap:

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed