Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1789 connectés 

  FORUM HardWare.fr
  Programmation
  Java

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°582550
Dephi
Posté le 03-12-2003 à 18:31:22  profilanswer
 

: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
mood
Publicité
Posté le 03-12-2003 à 18:31:22  profilanswer
 

n°583028
Dephi
Posté le 04-12-2003 à 13:55:01  profilanswer
 

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

n°583031
El_gringo
Posté le 04-12-2003 à 13:58:46  profilanswer
 

La classe java.awt.Robot est ton amie.


---------------
Les Vers Solitaires, on aime ... ou pas !
n°583038
gilou
Modérateur
Modzilla
Posté le 04-12-2003 à 14:07:22  profilanswer
 

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é!  --
n°583062
Dephi
Posté le 04-12-2003 à 15:08:49  profilanswer
 

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
n°583068
Dephi
Posté le 04-12-2003 à 15:20:40  profilanswer
 

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:  
 

n°583070
darklord
You're welcome
Posté le 04-12-2003 à 15:21:57  profilanswer
 

[:totoz]


---------------
Just because you feel good does not make you right
n°583074
benou
Posté le 04-12-2003 à 15:24:02  profilanswer
 


quoi ??
 
(fais pas ton greg :o)


---------------
ma vie, mon oeuvre - HomePlayer
n°583082
darklord
You're welcome
Posté le 04-12-2003 à 15:33:10  profilanswer
 

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
n°583094
benou
Posté le 04-12-2003 à 15:43:46  profilanswer
 

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
mood
Publicité
Posté le 04-12-2003 à 15:43:46  profilanswer
 

n°583103
lorill
Posté le 04-12-2003 à 15:58:49  profilanswer
 

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é).

n°583109
benou
Posté le 04-12-2003 à 16:10:09  profilanswer
 

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
n°583113
lorill
Posté le 04-12-2003 à 16:13:09  profilanswer
 

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.

n°583118
lorill
Posté le 04-12-2003 à 16:16:28  profilanswer
 

[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

n°583128
benou
Posté le 04-12-2003 à 16:31:02  profilanswer
 


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


---------------
ma vie, mon oeuvre - HomePlayer
n°583140
Dephi
Posté le 04-12-2003 à 16:39:41  profilanswer
 

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...
 
 

n°583297
darklord
You're welcome
Posté le 04-12-2003 à 20:36:16  profilanswer
 

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]

n°583310
benou
Posté le 04-12-2003 à 21:02:18  profilanswer
 

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
n°583316
Taiche
(╯°□°)╯︵ ┻━┻
Posté le 04-12-2003 à 21:05:51  profilanswer
 

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.
n°583318
chrisbk
-
Posté le 04-12-2003 à 21:06:32  profilanswer
 

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

n°583321
benou
Posté le 04-12-2003 à 21:08:56  profilanswer
 

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
n°583368
darklord
You're welcome
Posté le 04-12-2003 à 21:49:27  profilanswer
 

oh vos gueules hein :o

n°583436
the real m​oins moins
Posté le 04-12-2003 à 23:23:00  profilanswer
 

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 ?
n°583517
darklord
You're welcome
Posté le 05-12-2003 à 06:59:17  profilanswer
 

the real moins moins a écrit :

:heink: TOTOZ T CON OU QUOI


 
mais encore ...


---------------
Just because you feel good does not make you right
n°583779
the real m​oins moins
Posté le 05-12-2003 à 13:58:36  profilanswer
 

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 ?
n°583783
darklord
You're welcome
Posté le 05-12-2003 à 14:00:55  profilanswer
 

voir 4 posts ci dessus :o


---------------
Just because you feel good does not make you right
n°583903
veryfree
Posté le 05-12-2003 à 16:52:04  profilanswer
 

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:

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

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

 

Sujets relatifs
[Java]Declarer des variables de maniere dynamique?[java] probleme avec un passage d'argument...
[ASP]nouvelle fenetre + execution automatique d'une fonctionImprimer en java : probleme de scaling ...
quel compilo freeware JAVA me préconiseriez vous ?[NEW QUESTION] problème de concurrence et de verouillage en Java
[JAVA]Ecrire lire et creer un fichier txtHelp CPP type Java
[JAVA] Peut-on fixer le séparateur décimal à l'exécution ? 
Plus de sujets relatifs à : Execution d'un process via Java : Comment "simuler" le clavier ???


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR