IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Ecrire dans une fenetre cmd déjà ouverte


Sujet :

C#

  1. #1
    Membre averti
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    321
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 321
    Points : 360
    Points
    360
    Par défaut Ecrire dans une fenetre cmd déjà ouverte
    Bonjour,

    Je vous expose mon probleme : je souhaiterai récupérr une fenetre cmd déjà ouverte afin d'écrire à l'interieur (afin d'afficher des informations de debug). J'arrive déjà à réaliser cela a partir d'une fenetre cmd que je lance moi meme à l'aide de la classe Process, mais bien que j'arrive à récuperer une fentre de commande existante, je n'arrive pas à écrire dedans.
    Voici une portion de code que j'utilise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    System.Diagnostics.Process[] consoleProcesses = Process.GetProcessesByName("cmd");
    if (consoleProcesses.Length > 0){
       Process consoleProcess = consoleProcesses[0];
       consoleProcess.StartInfo.UseShellExecute = false;
       consoleProcess.StartInfo.RedirectStandardInput = true;
       consoleProcess.StandardInput.WriteLine("Essai d'ecriture dans la console");
       consoleProcess.StandardInput.Flush();
    }
    Ce code lève une InvalidOperationException. Si je deporte les deux dernieres lignes au moment où je clique sur un bouton par exemple, aucune exception n'est levée mais la console n'affiche rien... Avez-vous une idée ? J'ai trouvé beaucoup de tuto (tous) qui expliquent comment lire et ecrire dans les flux d'un processus qu'on lance mais aucun qui montre comment faire dans le cas d'un processus deja en cours d'execution.

    Merci par avance

  2. #2
    Membre averti
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    321
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 321
    Points : 360
    Points
    360
    Par défaut
    Une idée ?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    547
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 547
    Points : 627
    Points
    627
    Par défaut
    Salut,

    je n'ai pas la moindre idée de comment ecrire dans une console existante (sendkey + gestion de focus peut etre, pas tres clean mais bon). Par contre, utilisé des propriétés relatives au start de process, c'est sur que ca ne marchera pas.

    Bon courage. =)

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Tu n'as qu'à compiler ton programme en tant qu'application console, et utiliser Console.WriteLine...
    Par contre si ton idée est d'avoir plusieurs applis qui écrivent dans la même console, ça ne marchera pas...

  5. #5
    Membre averti
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    321
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 321
    Points : 360
    Points
    360
    Par défaut
    Bonjour,

    Je vous remercie pour vos réponses.

    Citation Envoyé par SirJulio Voir le message
    Salut,

    je n'ai pas la moindre idée de comment ecrire dans une console existante (sendkey + gestion de focus peut etre, pas tres clean mais bon). Par contre, utilisé des propriétés relatives au start de process, c'est sur que ca ne marchera pas.

    Bon courage. =)
    Je suis d'accord avec vous. J'ai testé cela un peu en desespoir de cause

    Citation Envoyé par tomlev Voir le message
    Tu n'as qu'à compiler ton programme en tant qu'application console, et utiliser Console.WriteLine...
    Par contre si ton idée est d'avoir plusieurs applis qui écrivent dans la même console, ça ne marchera pas...
    Effectivement, cela résoudrait mes problèmes ... mais n'est pas envisageable. Je travaille sur une librairie qui élargit les possibilités du langage actionscript (un projecteur). J'ai donc besoin que cela reste une dll

  6. #6
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 195
    Points
    5 195
    Par défaut
    salut

    ca, ca t'irait ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    namespace CmdConsoleTest
    {
        public static class CmdConsole
        {
            [DllImport("kernel32")]
            static extern bool AllocConsole();
     
            public static void Run()
            {
                AllocConsole();
            }
     
            public static void Write(object obj)
            {
                Console.WriteLine(obj);
            }
        }
    }
    The Monz, Toulouse
    The Monz, Toulouse
    Expertise dans la logistique et le développement pour
    plateforme .Net (Windows, Windows CE, Android)

  7. #7
    Membre averti
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    321
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 321
    Points : 360
    Points
    360
    Par défaut
    Salut,

    J'ai effectivement testé cette solution. Je pense d'ailleurs revenir dessus parce qu'elle a le merite de me permettre d'écrire dans la console. J'aurai toutefois préféré etre en mesure d'écrire dans une console existante. Le but est de ne pas etre trop intrusif : en gros si on a la console ouverte, on a le debug de l'application, autrement non

  8. #8
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 195
    Points
    5 195
    Par défaut
    salut

    ok ca marche

    sauf que , à priori, en faisant "Cmd" sous "executer" sous windows, tu peux
    ouvrir plusieurs fenetres de commande ... donc, pour le coté "intrusif"...

    et si plusieurs fenetres dos sont ouvertes, comment selectionner la fenetre
    adéquate

    The Monz, Toulouse
    The Monz, Toulouse
    Expertise dans la logistique et le développement pour
    plateforme .Net (Windows, Windows CE, Android)

  9. #9
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    et si plusieurs fenetres dos sont ouvertes, comment selectionner la fenetre
    adéquate
    Les sélectionner une à une, lire leurs contenu, et déterminer laquelle possède le contenu se rapprochant du contenu qu'il devrait y avoir
    bref faire comme un humain
    Pourquoi faire compliqué lorsque l'on peut faire encore plus compliqué.

  10. #10
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Une solution "propre" serait de faire une appli console qui reçoit les infos de debug par socket, remoting, shared memory, ou autre protocole, et les affiche... mais c'est un peu plus lourd à mettre en place.

  11. #11
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    Citation Envoyé par tomlev Voir le message
    Une solution "propre" serait de faire une appli console qui reçoit les infos de debug par socket, remoting, shared memory, ou autre protocole, et les affiche... mais c'est un peu plus lourd à mettre en place.
    Oui cela dépend s'il peut modifier la dll en question, je n'ai pas très bien compris ce point là dans ses messages précédent.
    Pourquoi faire compliqué lorsque l'on peut faire encore plus compliqué.

  12. #12
    Membre averti
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    321
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 321
    Points : 360
    Points
    360
    Par défaut
    j'ai effectivement la main sur dll : le truc c'st que ce n'est pas du tout l'objectif de la librairie que de réaliser cela. J'avais simplement besoin de pouvoir balancer les infos pendant l'execution dans une console dans le cas où celle-ci est ouverte.

  13. #13
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    autre solution, simple mais pas très élégante...
    Tu écris les messages de debug dans un fichier, et tu fais un process qui surveille le fichier et affiche les nouveaux messages dans la console.

  14. #14
    Membre averti
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    321
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 321
    Points : 360
    Points
    360
    Par défaut
    Oui effectivement. Cependant le probleme reste entier : je ne pourrais écrire que dans une console que j'aurai lancé, chose que je peux réaliser. L'interet est de disposer des informations sur l'execution si besoin seulement et de ne pas avoir systematiquement une fenetre qui s'ouvre au lancement de l'application.

  15. #15
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    Citation Envoyé par leyee Voir le message
    Oui effectivement. Cependant le probleme reste entier : je ne pourrais écrire que dans une console que j'aurai lancé, chose que je peux réaliser. L'interet est de disposer des informations sur l'execution si besoin seulement et de ne pas avoir systematiquement une fenetre qui s'ouvre au lancement de l'application.
    Soit je ne comprends pas ce que tu veux faire soit tu n'as pas compris les solutions de tomlev ?
    Pourquoi faire compliqué lorsque l'on peut faire encore plus compliqué.

  16. #16
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Je viens de tomber sur une fonction Win32 qui m'a rappelé cette discussion... je crois que ça correspond parfaitement au besoin !
    La fonction AttachConsole permet de s'attacher à une console d'un autre process. Donc il suffit de connaître le PID de la console déjà ouverte, et c'est bon
    http://msdn2.microsoft.com/en-us/lib...52(VS.85).aspx

Discussions similaires

  1. Ecrire dans une fenetre
    Par honrisse dans le forum Débuter
    Réponses: 16
    Dernier message: 20/04/2010, 18h55
  2. [A-00] ouvrir un mde dans une fenetre déjà ouverte
    Par noemieze dans le forum VBA Access
    Réponses: 1
    Dernier message: 07/10/2008, 14h08
  3. Ecrire dans une autre fenetre que celle de l'application
    Par aurelien59 dans le forum Windows
    Réponses: 3
    Dernier message: 15/05/2007, 11h50
  4. Réponses: 4
    Dernier message: 04/03/2007, 23h18
  5. gérer les jpg dans une fenetre directdraw???
    Par Anonymous dans le forum DirectX
    Réponses: 1
    Dernier message: 14/06/2002, 13h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo