mikrocontroller.net

Forum: PC-Programmierung C# Wie lese ich etwas ein?


Autor: Kehrenkamp (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guten Abend,

Ich wollte fragen ob jemand weiß wie man, eine Zeile aus einer breits 
ausgeführten (laufenden Prozess) Konsolenanwendung einließt?

Also z.B. Ich hab nen Hello World Programm was läuft und Hallo World 
ausgibt.
Nun möchte ich die Zeile mit einem neuen Programm Einlesen und auch 
ausgeben z.B..

Kann mir bitte einer helfen?

MfG

Autor: Chris ... (dechavue)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mittels der Klasse System.Diagnostics.Process kann man die 
Standardausgabe auf einen Stream Umleiten. Ich bin mir nicht sicher, 
aber ich glaube das Umleiten funktioniert nur wenn du den Prozess 
(mittels dieser Klasse) aus deinem Programm heraus startest.
Man kann sich zwar mittels der statischen Methoden der Process-Klasse in 
einen Laufenden Prozess reinhängen, allerdings muss man das Umleiten der 
Standardein-/Ausgabe in StartupInfo angeben. Daher meine Vermutung, dass 
es mit bereits laufenden Prozessen nicht funktioniert.

Wie man die Ausgabe von einem Laufenden Prozess umleiten kann weis ich 
leider auch nicht.

greets

Autor: Kehrenkamp (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
kann mir vielleicht einer ein beispiel bringen?

mfg

Autor: Kehrenkamp (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kann mir keiner helfen ?

Autor: Chris ... (dechavue)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Weil ich heute gut gelaunt bin ;)
 
using System;
using System.Diagnostics;
using System.Windows.Forms;
namespace Test {
    class Form1 : Form {
        TextBox m_tbTest;

        public Form1() {
            m_tbTest = new TextBox();
            m_tbTest.Multiline = true;
            m_tbTest.Dock = DockStyle.Fill;
            Controls.Add(m_tbTest);
            //~~~~~~~~~~~~~~~~~~~~~~~~~~
            Process p = new Process();
            p.StartInfo.FileName = "Test.exe";
            p.StartInfo.RedirectStandardOutput = true;
            p.StartInfo.UseShellExecute = false;
            p.OutputDataReceived += new DataReceivedEventHandler(p_OutputDataReceived);
            p.Start();
            p.BeginOutputReadLine();
        }

        private void p_OutputDataReceived(object sender, DataReceivedEventArgs e) {
            if (this.InvokeRequired) {
                this.BeginInvoke(new DataReceivedEventHandler(p_OutputDataReceived), sender, e);
            } else {
                m_tbTest.Text += e.Data + Environment.NewLine;
            }
        }    
        
        static void Main(string[] args) {
            Application.Run(new Form1());
        }
    }
}

Bei dem Beispiel muss das Zielprogramm aus diesem Programm heraus 
gestartet werden. Wie man von einem laufenden Prozess die 
Standardausgabe umleitet weis ich, wie bereits erwähnt, leider auch 
nicht.
Fallst du trotzdem in diese Richtung weiter recherchieren willst könnten 
dir Folgende Methoden hilfreich sein:
Process   p1    = Process.GetProcessById(...);
Process[] pArr1 = Process.GetProcesses();
Process[] pArr2 = Process.GetProcessesByName(...);

Damit kannst du dich an einen Laufenden Prozess ranhängen. Eventuell 
kannst du mittels WinAPI und dem hieraus erhaltenen Process-Handle die 
Standardausgabe auch nach dem Start noch umleiten.

greets

PS: In der Zwischenzeit hättest du ruhig ein wenig Eigeninitiative 
zeigen können: mit dem Stichwörtern Process+MSDN finden sich genaue 
Beschreibungen + Beispiele

Autor: Johnny (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Weil ich heute gut gelaunt bin ;)

Boah, sehr schönes Beispiel. Hoffe der Hilfesuchende weiss es ebenfalls 
zu schätzen.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.