Exécuter une commande DOS, rajouter une option dans le clique droit

Le
Guillaume
Bonjour à tous

Voilà, je me met au C# alor que je n'ais jamais dévellopé qu'en PHP, donc
j'ai un peut du mal

En fait, je galaire surtout sur 2 truc :

Premièrement, j'aimerais intaragire avec un programme en ligne de commande,
pour pouvoire faire une interface utilisateur. Donc, passer des commandes,
puis récupérer le résultat pour savoir comment réagire.

A savoir que quand le programme en question est lancé, on ne revien pas
forcément à l'invite c:>, mais que j'ai quand meme besoin de continuer à
passer des commandes au pragramme quand il l'attend

Deuxièmement, j'aimerais pouvoire rajouter une option dans le menu clique
droit de Windows lorsque on le fait sur un fichier (comme le font par
exemple les logiciel de compression/decompression), mais je n'arrive pas à
trouver comment faire

Merci d'avance pour votre aide
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Agnain
Le #12151791
Guillaume a écrit :
Bonjour à tous

Voilà, je me met au C# alor que je n'ais jamais dévellopé qu'en PHP,
donc j'ai un peut du mal

En fait, je galaire surtout sur 2 truc :

Premièrement, j'aimerais intaragire avec un programme en ligne de
commande, pour pouvoire faire une interface utilisateur. Donc, passer
des commandes, puis récupérer le résultat pour savoir comment réagire.

A savoir que quand le programme en question est lancé, on ne revien pas
forcément à l'invite c:>, mais que j'ai quand meme besoin de continuer
à passer des commandes au pragramme quand il l'attend

Deuxièmement, j'aimerais pouvoire rajouter une option dans le menu
clique droit de Windows lorsque on le fait sur un fichier (comme le font
par exemple les logiciel de compression/decompression), mais je n'arrive
pas à trouver comment faire...

Merci d'avance pour votre aide



Bonjour,

commencez par perfectionner votre français.
Luis
Le #12151781
Guillaume a utilisé son clavier pour écrire :
Bonjour à tous

Voilà, je me met au C# alor que je n'ais jamais dévellopé qu'en PHP, donc
j'ai un peut du mal

En fait, je galaire surtout sur 2 truc :

Premièrement, j'aimerais intaragire avec un programme en ligne de commande,
pour pouvoire faire une interface utilisateur. Donc, passer des commandes,
puis récupérer le résultat pour savoir comment réagire.

A savoir que quand le programme en question est lancé, on ne revien pas
forcément à l'invite c:>, mais que j'ai quand meme besoin de continuer à
passer des commandes au pragramme quand il l'attend

Deuxièmement, j'aimerais pouvoire rajouter une option dans le menu clique
droit de Windows lorsque on le fait sur un fichier (comme le font par exemple
les logiciel de compression/decompression), mais je n'arrive pas à trouver
comment faire...

Merci d'avance pour votre aide



Bonjour,

Voici une procédure pour exécuter une commande DOS et récuperer la
sortie standard de la commande dans un tableau string[]
--- Début du code
/// <summary>
/// Executer une commande DOS,
/// attendre la fin de la commande et
/// recuperer la sortie standard de la commande exécutée.
/// </summary>
/// <param name="cmd"> Commande à exécuter</param>
/// <param name="param"> Paramètres de la commande </param>
/// <returns>retour de la commande dans un string[] </returns>
public string[] CMDEXEC(string cmd, string param) {
ProcessStartInfo StartInfo=new ProcessStartInfo(cmd,param);
StartInfo.UseShellExecuteúlse;
StartInfo.StandardOutputEncoding=Encoding.GetEncoding(850);
StartInfo.RedirectStandardOutput=true;
StartInfo.CreateNoWindow=true;
Process proc=Process.Start(StartInfo);
// attendre la fin de la commande
proc.WaitForExit();
// récupérer la sortie standard
string result=proc.StandardOutput.ReadToEnd();
string[] result_lines=result.Split(new Char[]{'n'});
return result_lines;
}
--- fin du code

Bonne journée.
Luis
Guillaume
Le #12151771
Merci beaucoup pour votre aide, je vais tester ce code des que j'en aurais
l'occasion.

Par contre, savez vous comment rajouter une option dans le mennu clique
droit de Windows ?

Merci d'avance
Luis
Le #12151761
Guillaume avait prétendu :
Merci beaucoup pour votre aide, je vais tester ce code des que j'en aurais
l'occasion.

Par contre, savez vous comment rajouter une option dans le mennu clique droit
de Windows ?

Merci d'avance



Malheureusement non.
Désolé.
Luis
Gilles Kohl [MVP]
Le #12151751
On Fri, 25 Apr 2008 19:28:01 +0200, "Guillaume"
Merci beaucoup pour votre aide, je vais tester ce code des que j'en aurais
l'occasion.

Par contre, savez vous comment rajouter une option dans le mennu clique
droit de Windows ?



La théorie est ici:

http://msdn2.microsoft.com/en-us/library/bb776820.aspx

Interessant aussi:

http://www.codeproject.com/KB/shell/SimpleContextMenu.aspx

Amicalement,
Gilles.

Regards,
Gilles [MVP].

(Please reply to the group, not via email.
Find my MVP profile with past articles / downloads here:
http://www.gilleskohl.de/mvpprofile.htm)
Guillaume
Le #12151731
> Bonjour,

Voici une procédure pour exécuter une commande DOS et récuperer la sortie
standard de la commande dans un tableau string[]
--- Début du code
/// <summary>
/// Executer une commande DOS,
/// attendre la fin de la commande et
/// recuperer la sortie standard de la commande exécutée.
/// </summary>
/// <param name="cmd"> Commande à exécuter</param>
/// <param name="param"> Paramètres de la commande </param>
/// <returns>retour de la commande dans un string[] </returns>
public string[] CMDEXEC(string cmd, string param) {
ProcessStartInfo StartInfo=new ProcessStartInfo(cmd,param);
StartInfo.UseShellExecuteúlse;
StartInfo.StandardOutputEncoding=Encoding.GetEncoding(850);
StartInfo.RedirectStandardOutput=true;
StartInfo.CreateNoWindow=true;
Process proc=Process.Start(StartInfo);
// attendre la fin de la commande
proc.WaitForExit();
// récupérer la sortie standard
string result=proc.StandardOutput.ReadToEnd();
string[] result_lines=result.Split(new Char[]{'n'});
return result_lines;
}
--- fin du code

Bonne journée.
Luis






Bonjour,
Je vien de tester le code, et ce n'est pas du tout ce que je demandais...

En fait, ce code execute un programe, et récupère la sortie, pion barre.
Donc pour moi, qui cherche à interagire avec des programmes en ligne de
commande, ça ne vas pas... en plus, je ne peut pas du tout executer de
commandes DOS, ou envoyer des instruction à un programme DOS déjà lancé

Pour faire simple (ne me demandez pas l'utilité du truc, c'est pour
l'exemple) si j'utilise ce code pour lancer CMD.exe, il va re retourner les
ligne d'accueil de CMD puis l'invite de commande. Mantenant, si je veux
passer un echo "coucou", y'a pas moyen...

Je ne sais pas si je suis clair, j'ai souvent du mal pour m'exprimer, mais
je vous remerci quand meme de me lire et de chercher à m'aider

Cordialement
Guillaume
Le #12151711
"Gilles Kohl [MVP]" <no_email_available@> a écrit dans le message de
news:
On Fri, 25 Apr 2008 19:28:01 +0200, "Guillaume"

La théorie est ici:

http://msdn2.microsoft.com/en-us/library/bb776820.aspx

Interessant aussi:

http://www.codeproject.com/KB/shell/SimpleContextMenu.aspx

Amicalement,
Gilles.

Regards,
Gilles [MVP].

(Please reply to the group, not via email.
Find my MVP profile with past articles / downloads here:
http://www.gilleskohl.de/mvpprofile.htm)




Super merci, c'est exactement, ce que je cherchais ^^
Gilles TOURREAU [MVP]
Le #12151701
"Guillaume" news:
Bonjour,

Voici une procédure pour exécuter une commande DOS et récuperer la sortie
standard de la commande dans un tableau string[]
--- Début du code
/// <summary>
/// Executer une commande DOS,
/// attendre la fin de la commande et
/// recuperer la sortie standard de la commande exécutée.
/// </summary>
/// <param name="cmd"> Commande à exécuter</param>
/// <param name="param"> Paramètres de la commande </param>
/// <returns>retour de la commande dans un string[] </returns>
public string[] CMDEXEC(string cmd, string param) {
ProcessStartInfo StartInfo=new ProcessStartInfo(cmd,param);
StartInfo.UseShellExecuteúlse;
StartInfo.StandardOutputEncoding=Encoding.GetEncoding(850);
StartInfo.RedirectStandardOutput=true;
StartInfo.CreateNoWindow=true;
Process proc=Process.Start(StartInfo);
// attendre la fin de la commande
proc.WaitForExit();
// récupérer la sortie standard
string result=proc.StandardOutput.ReadToEnd();
string[] result_lines=result.Split(new Char[]{'n'});
return result_lines;
}
--- fin du code

Bonne journée.
Luis






Bonjour,
Je vien de tester le code, et ce n'est pas du tout ce que je demandais...

En fait, ce code execute un programe, et récupère la sortie, pion barre.
Donc pour moi, qui cherche à interagire avec des programmes en ligne de
commande, ça ne vas pas... en plus, je ne peut pas du tout executer de
commandes DOS, ou envoyer des instruction à un programme DOS déjà lancé

Pour faire simple (ne me demandez pas l'utilité du truc, c'est pour
l'exemple) si j'utilise ce code pour lancer CMD.exe, il va re retourner
les ligne d'accueil de CMD puis l'invite de commande. Mantenant, si je
veux passer un echo "coucou", y'a pas moyen...

Je ne sais pas si je suis clair, j'ai souvent du mal pour m'exprimer, mais
je vous remerci quand meme de me lire et de chercher à m'aider

Cordialement




Bonjour,

Cela dépend de l'application que vous manipulez :
1/Si votre application "attend" des informations sur son entrée standard,
vous pouvez utilisez Process.StandardInput (méthode inverse de
StandardOutput) pour envoyez des informations sur l'entrée standard.
2/Si votre application réagi à la souris ou ne prend rien dans son entrée
standard, il faudra dans ce cas trouvez un autre moyen de communication ou
alors simuler l'envoie des touches, de la souris,...etc

Cordialement

--
Gilles TOURREAU - MVP C#


S.A.R.L. P.O.S
Le spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr
Guillaume
Le #12151681
From: "Gilles TOURREAU [MVP]"
Bonjour,

Cela dépend de l'application que vous manipulez :
1/Si votre application "attend" des informations sur son entrée standard,
vous pouvez utilisez Process.StandardInput (méthode inverse de
StandardOutput) pour envoyez des informations sur l'entrée standard.
2/Si votre application réagi à la souris ou ne prend rien dans son entrée
standard, il faudra dans ce cas trouvez un autre moyen de communication ou
alors simuler l'envoie des touches, de la souris,...etc

Cordialement

--
Gilles TOURREAU - MVP C#




Bonjour, et merci pour ces informations.
Bon, comme je le disait, je suis vraiment débutant en C#, donc je galaire
vraiment...

Mais j'ai essayer de me dépatouiller avec la doc grace à vous infos, et j'ai
pondu un code qui me semble correcte.
Cepandant, pour un raison qui m'échappe totalement, la ligne ou je set le
standardInput à true fait completement planter l'apli quand je la test, et
je suis obligé de killer le process pour pouvoire retourner à l'IDE...

Voici le code, si vous pouviez me dire ou est l'erreur, celà m'aiderais
énormément.

/**********************************************************/

public Process application (string fichier, string parametre) {
ProcessStartInfo StartInfo = new ProcessStartInfo(fichier, parametre);
StartInfo.UseShellExecute = false;
StartInfo.StandardOutputEncoding = Encoding.GetEncoding(850);
StartInfo.RedirectStandardInput = true;
StartInfo.RedirectStandardOutput = true;
StartInfo.CreateNoWindow = true;
Process resultat = Process.Start(StartInfo);
resultat.WaitForExit();
return resultat;
}

public Process commande(Process application, string commande) {
StreamWriter envoiCommande = application.StandardInput;
envoiCommande.WriteLine(commande);
envoiCommande.Close();
application.WaitForExit();
return application;
}

public string retourApplication(Process application) {
string resultat = application.StandardOutput.ReadToEnd();
return resultat;
}

private void button1_Click(object sender, EventArgs e) {
Process cmd = application(@"C:WINDOWSSystem32cmd.exe", "");
cmd = commande(cmd, "echo coucou");
string resultat = retourApplication(cmd);
label1.Text = resultat;
}

/**********************************************************/

Merci d'avance pour votre aide

Cordialement
Gloops
Le #12151641
Guillaume a écrit, le 27/04/2008 18:43 :
Bonjour, et merci pour ces informations.
Bon, comme je le disait, je suis vraiment débutant en C#, donc je
galaire vraiment...

Mais j'ai essayer de me dépatouiller avec la doc grace à vous infos , et
j'ai pondu un code qui me semble correcte.
Cepandant, pour un raison qui m'échappe totalement, la ligne ou je se t
le standardInput à true fait completement planter l'apli quand je la
test, et je suis obligé de killer le process pour pouvoire retourner à
l'IDE...




Bonjour,

Si on redirige l'entrée, l'application est effectivement susceptible de
sortir du contrôle de l'utilisateur, si le flux d'entrée ne contient pas
ce qu'il faut jusqu'à la fermeture de l'application.

Mais à propos, je ne suis pas bien sûr d'avoir vu où est défini
StandardInput ; ça fait que je ne suis pas très à l'aise pour regar der
ce qu'il y a dedans, si tant est que c'est défini dans ton message.






Voici le code, si vous pouviez me dire ou est l'erreur, celà m'aidera is
énormément.

/**********************************************************/

public Process application (string fichier, string parametre) {
ProcessStartInfo StartInfo = new ProcessStartInfo(fichier, parametre) ;
StartInfo.UseShellExecute = false;
StartInfo.StandardOutputEncoding = Encoding.GetEncoding(850);
StartInfo.RedirectStandardInput = true;
StartInfo.RedirectStandardOutput = true;
StartInfo.CreateNoWindow = true;
Process resultat = Process.Start(StartInfo);
resultat.WaitForExit();
return resultat;
}

public Process commande(Process application, string commande) {
StreamWriter envoiCommande = application.StandardInput;
envoiCommande.WriteLine(commande);
envoiCommande.Close();
application.WaitForExit();
return application;
}

public string retourApplication(Process application) {
string resultat = application.StandardOutput.ReadToEnd();
return resultat;
}

private void button1_Click(object sender, EventArgs e) {
Process cmd = application(@"C:WINDOWSSystem32cmd.exe", "");
cmd = commande(cmd, "echo coucou");
string resultat = retourApplication(cmd);
label1.Text = resultat;
}

/**********************************************************/

Merci d'avance pour votre aide

Cordialement


Publicité
Poster une réponse
Anonyme