2009-09-22 6 views
4

Je ne suis pas entièrement sûr que cela soit possible. J'ai une application graphique héritée écrite en C#. En utilisant AttachConsole (-1) (à partir de kernel32.dll), je peux ajouter une fenêtre de console si elle est appelée à partir de la ligne de commande. J'ai même été capable d'écrire un module pour parcourir des cas d'utilisation basiques et faire en sorte qu'il ressemble à une application console. Je ne montre pas la fenêtre, et si je le fais ne met pas à jour ou fonctionne correctement (parce que je n'ai pas utilisé Application.Run)Contrôle d'une interface graphique C# basée sur les arguments d'entrée

Cependant, une autre personne dans mon équipe veut faire quelque chose de similaire où les arguments d'entrée déclenchera une série d'actions GUI (comme buttonExample.PerformClick(), mettre à jour les zones de texte, etc.) pour simuler un utilisateur. Est-il possible de le faire en utilisant C# entièrement ou devra-t-il utiliser quelque chose comme AutoIt? Nous utilisons VS2008/.NET Framework version 3.5.

Répondre

4

Vous pouvez ajouter des arguments de tableau de chaînes à votre static void Main() et les transmettre à la classe GUI pour effectuer de telles actions.

static class Program 
    { 
    /// <summary> 
    /// The main entry point for the application. 
    /// </summary> 
    [STAThread] 
    static void Main(string[] args) 
    { 
     ... 
     //TODO: Stuff with your args 
    } 
    } 
+0

Bien sûr. Je n'ai même pas compris que vous pouviez ajouter des arguments à la classe principale en cours d'exécution en tant qu'application. J'étais coincé en pensant que cela devait être vide sans arguments. – cgyDeveloper

+0

Oui, parfois c'est très facile à oublier. –

0

La réponse à votre question est «tri de ... Vous pouvez faire certaines choses, mais pour la plupart, vous aurez besoin d'exposer beaucoup de détails de votre forme. Voici un exemple simple:

class Program 
{ 
    public static void Main(string[] args) 
    { 
     Form2 frm = new Form2(); 
     if(args.Length >= 2 && args[0] == "something") 
     { 
      frm.txtTextArea.Text = args[1]; 
      frm.btnOk_OnClick(frm.btnOk, EventArgs.Empty); 
     } 
    } 
} 

public class Form2 : Form 
{ 
    public TextBox txtTextArea; 
    public Button btnOk; 

    public void btnOk_OnClick(object sender, EventArgs e) 
    { 
     //... code ... 
    } 
} 

Je vraiment, vraiment, vraiment, ne recommande pas cela. Vous devez refactoriser l'implémentation du formulaire et extraire votre code du formulaire dans une classe de logique métier.

+0

Vous pouvez également transformer et transmettre les arguments pertinents à l'objet formulaire et le laisser gérer les données, ce qui serait probablement préférable à l'affichage public des contrôles de formulaire. –

0

Vous pouvez utiliser la fonction SendInput de user32.dll

(Bien sûr, cela ne devrait se faire que si la modification de l'application GUI est impossible.)

Questions connexes