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 :

WinForm : Ouvrir un logiciel et agir dessus


Sujet :

C#

  1. #1
    Membre habitué
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2011
    Messages
    255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Octobre 2011
    Messages : 255
    Points : 193
    Points
    193
    Par défaut WinForm : Ouvrir un logiciel et agir dessus
    Bonjour a tous,

    J'ai dans mon programme un RichTextBox qui récupère pas mal d'information via mon programme.

    Je souhaiterai, une fois mon RichTextBox rempli, copié sont contenu et le collé dans une fenêtre du notePad par exemple.

    Je sais pas si c'est possible. J'arrive pour le moment a ouvrir le notePad mais pas a agir dessus.

    Je doute que ce soit réalisable, mais sait-on jamais.

    Voici le code du bouton pour le moment :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    System.Diagnostics.ProcessStartInfo myInfo = new System.Diagnostics.ProcessStartInfo();
    myInfo.FileName = "notepad.exe";
    System.Diagnostics.Process.Start(myInfo);
    Par avance, merci de votre aide.

  2. #2
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 317
    Points
    13 317
    Par défaut
    Bonjour

    C'est (c'était ?) possible avec une très ancienne techno d'IPC Microsoft qui s'appelle (s'appellait ?) le DDE (Dynamic Data Exchange).

    J'ignore si elle est toujours disponible avec .NET (j'ai un gros gros doute).

    Sinon, ce n'est pas très simple, mais faisable :

    - tu peux toujours mettre le contenu de de RTB dans le presse-papier.
    - donner le focus au notepad.
    - envoyer au notepad une séquence de touche pour faire CTRl-V.

    Par contre, je ne vois pas trop bien l'objectif fonctionnel ici. Précise, car peut être fais tu fausse route (en fonction de l'objectif fonctionnel, on peut peut être trouver une autre façon de faire les choses).

  3. #3
    Membre habitué
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2011
    Messages
    255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Octobre 2011
    Messages : 255
    Points : 193
    Points
    193
    Par défaut
    Merci Bluedeep pour ta réponse rapide.

    En fait, j'ai créer un générateur de class C#.
    J'ai donc dans mon programme pas mal d'info ( nom de classe, namespace, propriété, getter, setter, constructeur ... etc)

    je voulais en fait copier et coller ma classe générer dans notePad++ pour disposer de la colorisation syntaxique.

    J'ai déjà créer un bouton qui permet de copier le contenu dans le press-papier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     private void buttonCopy_Click(object sender, EventArgs e)
            {
               this.richTextBox1.SelectAll();
               this.richTextBox1.Copy(); 
            }
    Mais si tu pense que c'est compliqué, surtout pour le résultat obtenu, j'utiliserai ctrl + v ou le bon vieux clique droit.

    Ps : On sait tous que le programmeur est feignant

  4. #4
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 317
    Points
    13 317
    Par défaut
    Citation Envoyé par benny-blanco Voir le message
    En fait, j'ai créer un générateur de class C#.
    Avec CodeDOM ? ou tu t'es amusé à générer les syntaxes C# toi même ?

    je voulais en fait copier et coller ma classe générer dans notePad++ pour disposer de la colorisation syntaxique.
    Dans ce cas, le plus simple est d'écrire ta classe générée dans un fichier et de lancer NotePad ++ en lui passant le nom du fichier pour qu'il l'ouvre, non ?

    Accessoirement, au dessus tu parlais de NotePad pas de NotePad++ : je ne sais pas si le DDE existe toujours, mais, si il existe encore, je suis quasiment sur que NotePad++ ne le supporte pas; donc, exit le DDE.

    De plus, si ton code est généré, je ne vois pas trop bien à quoi sert ta RichTextBox.

  5. #5
    Membre émérite
    Avatar de azstar
    Homme Profil pro
    Architecte Technique BizTalk/.NET
    Inscrit en
    Juillet 2008
    Messages
    1 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Technique BizTalk/.NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 198
    Points : 2 424
    Points
    2 424
    Par défaut
    bonjour ;

    j'ai une idée un peu classique (pas du tout l’idéal )

    pourquoi ne pas enregistre le contenu dans un fichier et passe le chemin à notpad++ via cammand line

  6. #6
    Membre habitué
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2011
    Messages
    255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Octobre 2011
    Messages : 255
    Points : 193
    Points
    193
    Par défaut
    Malheureusement je ne connaissait pas CodeDom ( ça m'aurai bien servi )

    Oui je parlais de notePad en haut mais je pensais que le mécanisme aurai était le même via notePad++.

    L'idée de Command Line et de l’enregistrement via un fichier me plait bien, je vais me pencher dessus.

    Merci a vous deux.

    Pour ce qui est du RichTextBox, je l'utilise pour obtenir ma classe, comme je ne sauvegarde pas celle-ci dans un fichier, j'ai fais comme ça.

    Mais avec une sauvegarde et l'ouverture de notePad++ de ce même fichier, le RTB deviens effectivement inutile.

  7. #7
    Membre émérite
    Avatar de azstar
    Homme Profil pro
    Architecte Technique BizTalk/.NET
    Inscrit en
    Juillet 2008
    Messages
    1 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Technique BizTalk/.NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 198
    Points : 2 424
    Points
    2 424
    Par défaut
    Si tu prends en considération les modifications effectuées dans notepad++!!
    tu peut créer un watcher sur le processus lancé (notepad.exe ou notepad++.exe,... )une fois le processus est terminé tu peut récupérer les informations (fichier)

  8. #8
    Membre habitué
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2011
    Messages
    255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Octobre 2011
    Messages : 255
    Points : 193
    Points
    193
    Par défaut
    Citation Envoyé par azstar Voir le message
    Si tu prends en considération les modifications effectuées dans notepad++!!
    Quelle modification ?

  9. #9
    Membre émérite
    Avatar de azstar
    Homme Profil pro
    Architecte Technique BizTalk/.NET
    Inscrit en
    Juillet 2008
    Messages
    1 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Technique BizTalk/.NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 198
    Points : 2 424
    Points
    2 424
    Par défaut
    les modifications de ton contenu (fichier crée ) effectuées dans le notepad

  10. #10
    Membre habitué
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2011
    Messages
    255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Octobre 2011
    Messages : 255
    Points : 193
    Points
    193
    Par défaut
    Merci a vous deux pour votre aide.

    Je vais me pencher sur les solutions proposées plus haut.


  11. #11
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 317
    Points
    13 317
    Par défaut
    SInon, un bout de code qui lance le nodepad++, le passe en avant-plan et envoie une chaine de caractére à la fenètre fichier ouverte (à mettre dans une form avec un bouton "btnLaunchNotePad" et un textbox "textToSend").

    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
    20
    21
    22
    	[DllImport("user32.dll")]
    		public static extern bool SetForegroundWindow(IntPtr hWnd);
     
    		public Form1()
    		{
    			InitializeComponent();
    		}
     
    		private void btnLaunchNotePad_Click(object sender, EventArgs e)
    		{
    			Process notePadProcess = new Process();
    			notePadProcess.StartInfo.FileName = @"C:\Program Files\Notepad++\Notepad++.exe";
    			notePadProcess.StartInfo.WindowStyle = ProcessWindowStyle.Normal;			
    			bool started = notePadProcess.Start();
    			Thread.Sleep(1000); // 1 sec le temps que ca se lance.
    			if (started)
    			{
    				SetForegroundWindow(notePadProcess.MainWindowHandle);
    				//SendKeys.Send("^N"); // nouveau fichier.
    				SendKeys.Send(textToSend.Text);
    			}
    		}

  12. #12
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2010
    Messages : 12
    Points : 12
    Points
    12
    Par défaut
    il existe aussi une méthode, pour piloter des applications (dans la limite admise par nos droits à le faire), avec des api.

    c'est pas managé par c#, donc il faut le faire à l'ancienne...

    pour exemple, voilà un bout de code qui clique un bouton d'une autre application :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    private static void ClickTheButton(string WndTitle)
            {
                IntPtr hWnd;
                IntPtr hCible;
                const int BM_CLICK = 0x00F5;
     
                hWnd = FindWindowByCaption(new IntPtr(0), WndTitle);
                if (hWnd.ToInt32()!=0) 
                {
                    hCible = FindWindowEx(hWnd, new IntPtr(0), "Button", "Click Me");
     
                    if (hCible.ToInt32() != 0) SendMessage(hCible.ToInt32(), BM_CLICK, 0, 0);
                }
            }
    pour écrire du texte dans un controle d'une autre fenetre windows, on utiliserait simplement les bons arguments avec le SendMessage...
    ou bien un SetWindowsText à la place..

    bon courage

Discussions similaires

  1. Ouvrir autre logiciel à partir de vb
    Par fixfix dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 06/03/2007, 13h55
  2. [WinForms]ouvrir mon application depuis un fichier
    Par jul54 dans le forum Général Dotnet
    Réponses: 8
    Dernier message: 22/09/2006, 14h35
  3. Ouvrir un logiciel avec un programme
    Par liverbird dans le forum C++
    Réponses: 10
    Dernier message: 15/06/2006, 16h49
  4. Impossibilité d'ouvrir 1 logiciel de Office Pro 97
    Par User dans le forum Microsoft Office
    Réponses: 1
    Dernier message: 06/10/2005, 18h25
  5. [C#] [EXCEL] Travailler avec EXCEL sans ouvrir le logiciel
    Par Fabsou dans le forum Windows Forms
    Réponses: 3
    Dernier message: 16/07/2004, 10h29

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