C#/ process cmd.exe et sequence ALT + <020>ou CTRL+T [résolu] - C#/.NET managed - Programmation
Marsh Posté le 20-03-2010 à 12:07:03
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 .
Marsh Posté le 22-03-2010 à 11:16:50
Salut TotalRecall,
En mode console ça fonctionne très bien.
Voici une capture d'écran
Mon problème c'est que je n'arrive pas à reproduire ce comportement en C#.
Voilà.
Si tu as une solution je suis preneur
Marsh Posté le 22-03-2010 à 13:26:03
Des retours à la ligne
En C# je n'arrive pas à le programmer.
lorsque je fais mon dev, si tu veux ça m'affiche :
Code :
|
au lieu de
Code :
|
(comme sur la capture d'écran)
Marsh Posté le 23-03-2010 à 11:12:14
Et concrètement quand ça marche pas les retours à la ligne, ça ressemble à quoi ?
Marsh Posté le 24-03-2010 à 09:57:37
Salut Kenelm,
Si ça ne fonctionne pas tout est aligné du genre :
Code :
|
Donc illisible vu le type d'information affiché
Marsh Posté le 24-03-2010 à 10:25:02
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
Marsh Posté le 24-03-2010 à 10:28:22
Le code tu l'as dans le premier post....
Code :
|
Ce qui ne fonctionne pas, c'est ce que j'ai mis en Gras et en rouge
Marsh Posté le 24-03-2010 à 10:40:29
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 .
Marsh Posté le 24-03-2010 à 10:51:09
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 :
|
Je crois que je vais balancer mon pc par la fenêtre
Marsh Posté le 24-03-2010 à 12:32:15
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ù.
Marsh Posté le 25-03-2010 à 16:26:20
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.
Marsh Posté le 25-03-2010 à 17:14:19
Code :
|
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 \\)?
Marsh Posté le 25-03-2010 à 18:02:34
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 :
|
sans rien derrière. ligne 2 et ligne 3 disparaissent.
Mais j'y crois, nous allons trouver !!!
Marsh Posté le 25-03-2010 à 18:33:22
ReplyMarsh Posté le 26-03-2010 à 00:36:51
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 @ ?
Marsh Posté le 26-03-2010 à 11:47:21
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 .
Marsh Posté le 26-03-2010 à 14:15:40
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".
Marsh Posté le 26-03-2010 à 14:38:28
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.
Marsh Posté le 29-03-2010 à 07:43:18
Bonjour Tout le monde,
Fred82 merci ça fonctionne nickel !!!
Je vous remercie tous pour votre aide.
Marsh Posté le 18-03-2010 à 09:56:34
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 :
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:
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