2008-09-17 6 views
3

J'écris un programme en point net qui exécutera des scripts et des programmes en ligne de commande à l'aide de l'objet Process de Framework 2.0. Je veux pouvoir accéder aux tampons d'écran du processus dans mon programme. J'ai étudié cela et il me semble que j'ai besoin d'accéder aux tampons stdout et stderr de la console. Quelqu'un sait comment cela est accompli en utilisant le code managé? Je pense que j'ai besoin d'utiliser le AttachConsole et le ReadConsoleOutput de la console Windows attachée à la tâche afin de lire un bloc de données de caractères et d'attributs à partir de l'écran de la console. Je dois faire ceci est le code managé.Ecriture d'une fenêtre de commande à l'aide du code managé .net

Voir http://msdn.microsoft.com/en-us/library/ms684965(VS.85).aspx

Répondre

2

Vous pouvez accomplir cela en utilisant les propriétés StandardError, standardOutput et StandardInput sur la classe System.Diagnostics.Process. MSDN a un example of redirecting standard in and out agréable d'un processus.

Notez que vous pouvez uniquement rediriger la sortie des processus que vous avez démarrés. Les processus externes que vous n'avez pas lancés ne peuvent pas avoir leur stdout redirigée après le fait.

Notez également que pour utiliser StandardInput, vous devez définir ProcessStartInfo.UseShellExecute sur false et vous devez définir ProcessStartInfo.RedirectStandardInput sur true. Sinon, l'écriture dans le flux StandardInput déclenche une exception.

+0

Merci pour la réponse rapide. Je ne veux pas lire le flux cependant. Je veux accéder à la mémoire tampon de la console qui est affichée dans la fenêtre de commande. Ce serait comme faire un scrappage d'écran sur une page html. –

+0

Je pense que je dois utiliser la méthode AttachConsole de la console puis la méthode ReadConsoleOutput pour accéder à un rectangle de données de caractères et d'attributs. Je ne sais pas comment faire cela dans le code managé. –

Questions connexes