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

  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  [résolu] C#/ process cmd.exe et sequence ALT + <020>ou CTRL+T

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[résolu] C#/ process cmd.exe et sequence ALT + <020>ou CTRL+T

n°1974804
spish
Posté le 18-03-2010 à 09:56:34  profilanswer
 

Bonjour,
 
J'ai un petit soucis que je n'arrive pas à résoudre malgré mes multiples tentatives et recherches sur le net.
 
Dans le cadre d'un traitement sur une base de donnée, je doit avertir les utilisateurs de certaines incohérences très rapidement.
Pour cela j'utilise NET SEND.
 
Mon problème et que je n'arrive pas à envoyer la commande de retour à la ligne depuis mon programme en C#.
Si en ligne de commande je tape :

Code :
  1. NET SEND spish Des erreurs sont présentes aux lignes :ALT+<020>256 Error 212ALT+<020>369 Error 212


 
J'obtiens bien mes retours à la ligne.
 
Par contre dans mon code C#, si je passe des "\\n" ou des (char)10 + (char)13 il ne me les prends pas en compte;
 
Voici le code:
 

Code :
  1. string message= "";
  2.                     try
  3.                     {
  4.                         //Creation du message
  5.                         for (int i = 0; i < dataset.Tables[0].Rows.Count; i++)
  6.                         {
  7.                             for (int j = 0; j < dataset.Tables[0].Columns.Count; j++)
  8.                             {
  9.                                 message = message +" "+ dataset.Tables[0].Rows[i][j].ToString();
  10.                             }
  11.                             message=message+"\\n\\r";
  12.                         }
  13.                         Process objProcess = new Process();
  14.                         objProcess.StartInfo.FileName = "cmd.exe";
  15.                         objProcess.StartInfo.Arguments = "/C NET SEND SPISH " +message;
  16.                         objProcess.StartInfo.WindowStyle = ProcessWindowStyle.Normal;
  17.                         objProcess.StartInfo.CreateNoWindow = false;
  18.                         objProcess.Start();
  19.                         objProcess.WaitForExit();
  20.                     }


 
Quelqu'un aurait-il une idée de comment envoyer les control key ALT+<020> ou CTRL+T ?
 
Merci d'avance pour vos réponses


Message édité par spish le 29-03-2010 à 07:44:00
mood
Publicité
Posté le 18-03-2010 à 09:56:34  profilanswer
 

n°1975471
TotalRecal​l
Posté le 20-03-2010 à 12:07:03  profilanswer
 

Et selon toi on est sensé pouvoir mettre des retours à la ligne dans les arguments d'une ligne de commande :??:
Si j'ai bien compris ce que tu veux faire faire à net send tu dois remplacer tes \n \r par un ^T (ou qqch du genre, voir la doc de Net send).
Essaie déjà en mode console avant de le faire par programmation [:spamafote].


---------------
Topic .Net - C# @ Prog
n°1975892
spish
Posté le 22-03-2010 à 11:16:50  profilanswer
 

Salut TotalRecall,
 
En mode console ça fonctionne très bien.
 
Voici une capture d'écran
http://img5.hostingpics.net/thumbs/mini_7913602010_03_22_111153.png
 
Mon problème c'est que je n'arrive pas à reproduire ce comportement en C#.
 
Voilà.
 
Si tu as une solution je suis preneur :)

n°1975907
TotalRecal​l
Posté le 22-03-2010 à 12:05:56  profilanswer
 

Ba ca fait quoi :??:


---------------
Topic .Net - C# @ Prog
n°1975941
spish
Posté le 22-03-2010 à 13:26:03  profilanswer
 

Des retours à la ligne :)
En C# je n'arrive pas à le programmer.
 
lorsque je fais mon dev, si tu veux ça m'affiche :
 

Code :
  1. Ligne 1 Ligne 2 Ligne 3


au lieu de  

Code :
  1. Ligne 1
  2. Ligne 2
  3. Ligne 3

(comme sur la capture d'écran)

n°1976234
Kenelm
Posté le 23-03-2010 à 11:12:14  profilanswer
 

Et concrètement quand ça marche pas les retours à la ligne, ça ressemble à quoi ?

n°1976625
spish
Posté le 24-03-2010 à 09:57:37  profilanswer
 

Salut Kenelm,
 
Si ça ne fonctionne pas tout est aligné du genre :
 

Code :
  1. Ligne 1 Ligne 2 Ligne3.....


 
Donc illisible vu le type d'information affiché

n°1976641
TotalRecal​l
Posté le 24-03-2010 à 10:25:02  profilanswer
 

En mode console ça marche et en C# via process ça ne marche plus pour rigoureusement la même chaîne ?
Ca serait bien que tu te décides à partager un peu de code plutôt que donner des bribes d'infos à chaque post [:spamafote]


---------------
Topic .Net - C# @ Prog
n°1976644
spish
Posté le 24-03-2010 à 10:28:22  profilanswer
 

:??:  :??:  :??:  
Le code tu l'as dans le premier post....
 

Code :
  1. 1. string message= "";
  2.    2.                     try
  3.    3.                     {
  4.    4.                         //Creation du message
  5.    5.                         for (int i = 0; i < dataset.Tables[0].Rows.Count; i++)
  6.    6.                         {
  7.    7.                             for (int j = 0; j < dataset.Tables[0].Columns.Count; j++)
  8.    8.                             {
  9.    9.                                 message = message +" "+ dataset.Tables[0].Rows[i][j].ToString();
  10.   10.                             }
  11.   11.                             message=message+"\\n\\r";
  12.   12.                         }
  13.   13.
  14.   14.                         Process objProcess = new Process();
  15.   15.                         objProcess.StartInfo.FileName = "cmd.exe";
  16.   16.                         objProcess.StartInfo.Arguments = "/C NET SEND SPISH " +message;
  17.   17.                         objProcess.StartInfo.WindowStyle = ProcessWindowStyle.Normal;
  18.   18.                         objProcess.StartInfo.CreateNoWindow = false;
  19.   19.                         objProcess.Start();
  20.   20.                         objProcess.WaitForExit();
  21.   21.
  22.   22.                     }


 
Ce qui ne fonctionne pas, c'est ce que j'ai mis en Gras et en rouge :)
 

n°1976662
TotalRecal​l
Posté le 24-03-2010 à 10:40:29  profilanswer
 

Euh là je me demande si toi tu as lu mon post où je te donne une réponse possible... Pas étonnant que j'ai l'impression qu'on tourne en rond depuis le premier post :sarcastic:.


Message édité par TotalRecall le 24-03-2010 à 10:42:04

---------------
Topic .Net - C# @ Prog
mood
Publicité
Posté le 24-03-2010 à 10:40:29  profilanswer
 

n°1976666
spish
Posté le 24-03-2010 à 10:51:09  profilanswer
 

Non j'ai bien vu, remplacer mes \n par ^T
Sauf que si je fais ça, le programme l'interprète comme des caractère simples et ça me donne :

Code :
  1. Ligne 1^TLigne 2^TLigne3


 
Je crois que je vais balancer mon pc par la fenêtre :)
 
 

n°1976748
TotalRecal​l
Posté le 24-03-2010 à 12:32:15  profilanswer
 

C'est bien ^T (ctrl T) qu'il faut faire, tu as vérifié ? J'avais précisé de contrôler dans la doc juste au cas où.


---------------
Topic .Net - C# @ Prog
n°1976816
spish
Posté le 24-03-2010 à 14:29:30  profilanswer
 

oui c'est bien CTRL T (ou ALT +020)

n°1977360
spish
Posté le 25-03-2010 à 16:26:20  profilanswer
 

Salut Fred82,
 
Pour le moment, en ligne de commande en passant par un fichier j'arrive à reproduire l'exemple de ton site, mais j'ai l'impression que j'ai le même soucis qu'avant.
 
C'est à dire que lorsque je crée le fichier depuis mon prog C# le fichier ne doit pas être formaté correctement, car il ne me prends pas le caractère de saut de ligne en compte.
 
Je continue de chercher.
 
merci pour les coups de mains les gars :)
 
Si vous avez d'autres idées je prends.

n°1977428
breizhbugs
Posté le 25-03-2010 à 17:14:19  profilanswer
 

Code :
  1. string message= "";
  2.                     try
  3.                     {
  4.                         //Creation du message
  5.                         for (int i = 0; i < dataset.Tables[0].Rows.Count; i++)
  6.                         {
  7.                             for (int j = 0; j < dataset.Tables[0].Columns.Count; j++)
  8.                             {
  9.                                 message = message +" "+ dataset.Tables[0].Rows[i][j].ToString();
  10.                             }
  11.                             message=message+"\\n\\r";
  12.                         }
  13.                         }


J'ai voulu tester mais étant sous W7, il n'y a plus la commande NET SEND!
As tu essayé en mettant "\n\r" (sans doubler les \\)?

n°1977456
spish
Posté le 25-03-2010 à 18:02:34  profilanswer
 

Salut breizhbugs,
 
Effectivement la commande n'existe plus sous Windows 7 (dommage d'ailleurs) et elle est désactivé sous Xp (pour l'activer : Services : affichage des messages)
 
Sinon j'ai testé ta solution avec un @ devant et dans ce cas précis il ne m'affiche plus que :
 

Code :
  1. Ligne 1


sans rien derrière. ligne 2 et ligne 3 disparaissent.
 
Mais j'y crois, nous allons trouver !!! :)

n°1977479
breizhbugs
Posté le 25-03-2010 à 18:33:22  profilanswer
 

Et juste "\n"?
(il sert a quoi le @? - je suis nul en c#!)

n°1977606
breizhbugs
Posté le 26-03-2010 à 00:36:51  profilanswer
 


 
Justement il faut que le compilo transforme le "\n\r" en retour a la ligne, chose qu'il ne fait pas faire si vous mettez @ devant parce que c''est pas cmd.exe qui va faire la transformation...
Ca donne quoi "\n\r" sans le @ ?

n°1977710
TotalRecal​l
Posté le 26-03-2010 à 11:47:21  profilanswer
 

A mon avis sur le fond ça revient au même que le ^T.
Grossièrement le ^ est un symbole pour la touche ctrl et un préfixe en ascii pour spécifier les caractères non affichables, avec une séquence correspondant à chacun.
Par contre l'accent circonflexe tel qu'il est généré en le tapant est peut être un caractère différent de celui qui signifie Ctrl, il doit y avoir une astuce comme ça.

 

edit : ah ben ouais char(20) = ^T, cf le tableau en bas http://en.wikipedia.org/wiki/ASCII [...] characters

 

re-edit : je confirme, quand on fait un tape ctrl G (qui déclenche un Bell) dans l'interpréteur de commande on a bien le bip, et à l'écran ça affiche bien ^G, par contre si on tape à la main ^ et G (ce qui visuellement rend exactement de la même façon), là ça ne marche pas.
Un truc m'échappe peut être mais je pense que le caractère ^ n'a pas le même code dans les deux cas, pourtant dans la table ASCII je n'en vois qu'un. C'est la première fois que je fais joujou avec ça même si je connaissais vaguement les principes, si quelqu'un en sait plus long je suis assez curieux :).


Message édité par TotalRecall le 26-03-2010 à 11:57:59

---------------
Topic .Net - C# @ Prog
n°1977767
Kenelm
Posté le 26-03-2010 à 14:15:40  profilanswer
 

Ce que l'on voit et ce qui est sont deux choses différentes.
 
C'est comme le "\0" qui marque une fin de chaîne, ce sont deux caractères visuellement, et pourtant c'est représenté en mémoire par un seul. Donc oui, un caractère "^" suivi d'un caractère "T" c'est différent d'un caractère "^T".

n°1977780
TotalRecal​l
Posté le 26-03-2010 à 14:38:28  profilanswer
 

Mais à la différence du \0 (qui est une spécificité du C et des langages qui en dérivent, pas une commande système) je pensais que l'écriture avec les ^ était interprétée par le shell. Donc soit le ^ "commande" et la diacritique sont deux caractères ascii différents (on ne dirait pas) soit, comme tu dis c'est à la saisie et l'affichage que se fait la gestion du comportement. Vraisemblablement c'est bien ce qui se passe.


Message édité par TotalRecall le 26-03-2010 à 14:38:51

---------------
Topic .Net - C# @ Prog
n°1978246
spish
Posté le 29-03-2010 à 07:43:18  profilanswer
 

Bonjour Tout le monde,
 
Fred82 merci ça fonctionne nickel !!!
 
Je vous remercie tous pour votre aide.

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  [résolu] C#/ process cmd.exe et sequence ALT + <020>ou CTRL+T

 

Sujets relatifs
[Résolu] Erreur avec ereg_replaceDépendance C++/cli
[Visual C++ / Qt / OpenGL] LNK2001 : unresolved external symbol[RESOLU] [JS] Echanger deux images
[résolu] Parcourir un objet?[Resolu] JS s'arrete de s'executer...
[Résolu] Problème de socket urlretrieve[RESOLU] Récupération valeur bouton radio et textarea - formulaire
[Résolu] Problème Http -> HttpsSimulation de Alt tab sous VBA (Excel)
Plus de sujets relatifs à : [résolu] C#/ process cmd.exe et sequence ALT + <020>ou CTRL+T


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