Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Interagir avec une application en ligne de commande

7 réponses
Avatar
Nicolas B.
Bonjour,

J'essaie de faire un programme qui utilise une application fonctionnant
en ligne de commande, mais je ne sais pas comment faire pour :
- lancer l'application avec des arguments,
- récupérer, quand je la lance dans mon programme, les messages qu'elle
répondrait si elle était lancée dans une invite de commande.

Merci,


Nicolas

7 réponses

Avatar
Fred
Dans : news:,
Nicolas B. disait :
Bonjour,



Bonjour,

J'essaie de faire un programme qui utilise une application
fonctionnant en ligne de commande, mais je ne sais pas comment faire
pour :
- lancer l'application avec des arguments,
- récupérer, quand je la lance dans mon programme, les messages
qu'elle répondrait si elle était lancée dans une invite de commande.



Un petit exemple qui affiche le résultat d'une commande DIR dans un
label.

Imports System.Diagnostics
Imports System.IO
Imports System.Text

Public Class Form1
Private Sub Test
Dim psi As New ProcessStartInfo()
psi.Arguments = "/C DIR *.*"
psi.FileName = "CMD.EXE"
psi.RedirectStandardOutput = True
psi.StandardOutputEncoding = _
Encoding.GetEncoding("ibm850")
psi.UseShellExecute = False
Dim p As Process = Process.Start(psi)
Using o As StreamReader = p.StandardOutput
While Not o.EndOfStream
Me.Label1.Text &= o.ReadLine & vbCrLf
End While
End Using
End Sub
End Class

--
Fred
http://www.cerber mail.com/?3kA6ftaCvT (enlever l'espace)
Avatar
Nicolas B.
Je n'ai pas encore testé, mais je pense que c'est exactement ce qu'il me
faut. Merci !

Bonne journée,


Nicolas

Fred a écrit :

Un petit exemple qui affiche le résultat d'une commande DIR dans un label.

Imports System.Diagnostics
Imports System.IO
Imports System.Text

Public Class Form1
Private Sub Test
Dim psi As New ProcessStartInfo()
psi.Arguments = "/C DIR *.*"
psi.FileName = "CMD.EXE"
psi.RedirectStandardOutput = True
psi.StandardOutputEncoding = _
Encoding.GetEncoding("ibm850")
psi.UseShellExecute = False
Dim p As Process = Process.Start(psi)
Using o As StreamReader = p.StandardOutput
While Not o.EndOfStream
Me.Label1.Text &= o.ReadLine & vbCrLf
End While
End Using
End Sub
End Class



Avatar
Nicolas B.
Re bonjour,

Le code précédent fonctionne bien. Mais finalement, mon problème est un
peu plus compliqué : l'application que je lance en ligne de commande me
pose des questions (du type "Voulez-vous écraser les fichiers ?") et je
dois y répondre ("> oui"). Il faudrait que j'arrive à la fois à
récupérer dans mon programme les questions que me pose l'application
lancée et répondre à ces questions, là aussi à partir de mon programme.

Est-ce faisable ?

Merci,


Nicolas

Fred a écrit :
Dans : news:,
Nicolas B. disait :
Bonjour,



Bonjour,

J'essaie de faire un programme qui utilise une application
fonctionnant en ligne de commande, mais je ne sais pas comment faire
pour :
- lancer l'application avec des arguments,
- récupérer, quand je la lance dans mon programme, les messages
qu'elle répondrait si elle était lancée dans une invite de commande.



Un petit exemple qui affiche le résultat d'une commande DIR dans un label.

Imports System.Diagnostics
Imports System.IO
Imports System.Text

Public Class Form1
Private Sub Test
Dim psi As New ProcessStartInfo()
psi.Arguments = "/C DIR *.*"
psi.FileName = "CMD.EXE"
psi.RedirectStandardOutput = True
psi.StandardOutputEncoding = _
Encoding.GetEncoding("ibm850")
psi.UseShellExecute = False
Dim p As Process = Process.Start(psi)
Using o As StreamReader = p.StandardOutput
While Not o.EndOfStream
Me.Label1.Text &= o.ReadLine & vbCrLf
End While
End Using
End Sub
End Class



Avatar
OlivierH
Il faudrait connaitre les options de lancement de ton appli
L'option silent en general => monappli.exe /s

Olivier

Nicolas B. a écrit :
Re bonjour,

Le code précédent fonctionne bien. Mais finalement, mon problème est un
peu plus compliqué : l'application que je lance en ligne de commande me
pose des questions (du type "Voulez-vous écraser les fichiers ?") et je
dois y répondre ("> oui"). Il faudrait que j'arrive à la fois à
récupérer dans mon programme les questions que me pose l'application
lancée et répondre à ces questions, là aussi à partir de mon programme.

Est-ce faisable ?

Merci,


Nicolas

Fred a écrit :

Dans : news:,
Nicolas B. disait :

Bonjour,



Bonjour,


J'essaie de faire un programme qui utilise une application
fonctionnant en ligne de commande, mais je ne sais pas comment faire
pour :
- lancer l'application avec des arguments,
- récupérer, quand je la lance dans mon programme, les messages
qu'elle répondrait si elle était lancée dans une invite de commande.



Un petit exemple qui affiche le résultat d'une commande DIR dans un label.

Imports System.Diagnostics
Imports System.IO
Imports System.Text

Public Class Form1
Private Sub Test
Dim psi As New ProcessStartInfo()
psi.Arguments = "/C DIR *.*"
psi.FileName = "CMD.EXE"
psi.RedirectStandardOutput = True
psi.StandardOutputEncoding = _
Encoding.GetEncoding("ibm850")
psi.UseShellExecute = False
Dim p As Process = Process.Start(psi)
Using o As StreamReader = p.StandardOutput
While Not o.EndOfStream
Me.Label1.Text &= o.ReadLine & vbCrLf
End While
End Using
End Sub
End Class






Avatar
Fred
Dans : news:%,
Nicolas B. disait :
Re bonjour,

Le code précédent fonctionne bien. Mais finalement, mon problème est
un peu plus compliqué : l'application que je lance en ligne de
commande me pose des questions (du type "Voulez-vous écraser les
fichiers ?") et je dois y répondre ("> oui"). Il faudrait que
j'arrive à la fois à récupérer dans mon programme les questions que
me pose l'application lancée et répondre à ces questions, là aussi à
partir de mon programme.

Est-ce faisable ?



Oui sans doute, mais je n'ai pas testé.
Il existe également RedirectStandardInput et le StreamWriter
StandardInput.
Il faudra donc tester chaque ligne lue sur le OutputStream pour
éventuellement écrire une réponse sur le InputStream.
Attention, il faut gérer la lecture caractère par caractère car
lorsque'une question est posée, elle peut l'être avant le retour à la
ligne.

--
Fred
http://www.cerber mail.com/?3kA6ftaCvT (enlever l'espace)
Avatar
Nicolas B.
Je vais essayer de m'en sortir en utilisant à la fois le StreamReader et
le StreamWriter, mais ça va effectivement être un peu plus compliqué...


Bonne soirée,

Nicolas

Fred a écrit :
Dans : news:%,
Nicolas B. disait :
Re bonjour,

Le code précédent fonctionne bien. Mais finalement, mon problème est
un peu plus compliqué : l'application que je lance en ligne de
commande me pose des questions (du type "Voulez-vous écraser les
fichiers ?") et je dois y répondre ("> oui"). Il faudrait que
j'arrive à la fois à récupérer dans mon programme les questions que
me pose l'application lancée et répondre à ces questions, là aussi à
partir de mon programme.

Est-ce faisable ?



Oui sans doute, mais je n'ai pas testé.
Il existe également RedirectStandardInput et le StreamWriter StandardInput.
Il faudra donc tester chaque ligne lue sur le OutputStream pour
éventuellement écrire une réponse sur le InputStream.
Attention, il faut gérer la lecture caractère par caractère car
lorsque'une question est posée, elle peut l'être avant le retour à la
ligne.



Avatar
OlivierH
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta content="text/html;charset=ISO-8859-1" http-equiv="Content-Type">
</head>
<body bgcolor="#ffffff" text="#000000">
Si tu veux , tu peux utiliser aussi utiliser cette classe<br>
<br>
afin de simuler les commandes clavier<br>
<br>
<font color="#0033ff" size="2"><font face="Courier New">My.Computer.Keyboard.SendKeys("TAB"</font></font><font
face="Courier New" size="2"><font color="#0033ff">) ' pour chan</font></font>ger<br>
<br>
<font color="#0033ff" size="2"><font face="Courier New">My.Computer.Keyboard.SendKeys("ENTER"</font></font><font
face="Courier New" size="2"><font color="#0033ff">) ' pour chan</font></font>ger<br>
<br>
<a class="moz-txt-link-freetext" href="http://msdn2.microsoft.com/fr-fr/library/fx2k26ca(vs.80).aspx">http://msdn2.microsoft.com/fr-fr/library/fx2k26ca(vs.80).aspx</a><br>
<br>
<br>
Ca m'a permis d'installer une appli en repondant aux questions.<br>
<br>
Et en foxpro j'utilise Wscript.Shell<br>
oShell.SendKeys("{ENTER}{TAB}{TAB}{TAB}{TAB}{UP}{ENTER}{ENTER}{ENTER}")<br>
<br>
Et j'installe mon appli comme cela.<br>
<br>
olivier<br>
<br>
<font face="Courier New" size="2"><font color="#0033ff"><br>
</font></font><br>
<br>
Nicolas B. a &eacute;crit&nbsp;:
<blockquote cite="mid:" type="cite">
<pre wrap="">Je vais essayer de m'en sortir en utilisant &agrave; la fois le StreamReader et
le StreamWriter, mais &ccedil;a va effectivement &ecirc;tre un peu plus compliqu&eacute;...


Bonne soir&eacute;e,

Nicolas

Fred a &eacute;crit :
</pre>
<blockquote type="cite">
<pre wrap="">Dans : <a class="moz-txt-link-freetext" href="news:%">news:%</a>,
Nicolas B. disait :
</pre>
<blockquote type="cite">
<pre wrap="">Re bonjour,

Le code pr&eacute;c&eacute;dent fonctionne bien. Mais finalement, mon probl&egrave;me est
un peu plus compliqu&eacute; : l'application que je lance en ligne de
commande me pose des questions (du type "Voulez-vous &eacute;craser les
fichiers ?") et je dois y r&eacute;pondre ("&gt; oui"). Il faudrait que
j'arrive &agrave; la fois &agrave; r&eacute;cup&eacute;rer dans mon programme les questions que
me pose l'application lanc&eacute;e et r&eacute;pondre &agrave; ces questions, l&agrave; aussi &agrave;
partir de mon programme.

Est-ce faisable ?
</pre>
</blockquote>
<pre wrap="">Oui sans doute, mais je n'ai pas test&eacute;.
Il existe &eacute;galement RedirectStandardInput et le StreamWriter StandardInput.
Il faudra donc tester chaque ligne lue sur le OutputStream pour
&eacute;ventuellement &eacute;crire une r&eacute;ponse sur le InputStream.
Attention, il faut g&eacute;rer la lecture caract&egrave;re par caract&egrave;re car
lorsque'une question est pos&eacute;e, elle peut l'&ecirc;tre avant le retour &agrave; la
ligne.

</pre>
</blockquote>
</blockquote>
</body>
</html>